Итак, у меня есть gridview, как показано в следующем html:
<asp:GridView ID="gridDetaljiNarudzbe" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" runat="server" OnRowCommand="gridDetaljiNarudzbe_RowCommand" OnPageIndexChanging="gridDetaljiNarudzbe_PageIndexChanging" OnRowDataBound="gridDetaljiNarudzbe_RowDataBound">
<Columns>
<asp:BoundField DataField="Naziv" HeaderText="Naziv" />
<asp:BoundField DataField="Sifra" HeaderText="Šifra" />
<asp:BoundField DataField="Cijena" HeaderText="Cijena" />
<asp:BoundField DataField="Kolicina" HeaderText="Količina" />
<asp:TemplateField HeaderText="Ocjena">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnOcijeni" title="Ocijeni proizvod" CommandName="OcijeniCommand" CommandArgument='<%# Eval("ProizvodID") %>' runat="server"><img src="../images/ocijeni.png" /></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Для заполнения выпадающего списка для каждой записи в БД я использовал следующий код (событие RowDataBound):
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList drop = e.Row.FindControl("DropDownList1") as DropDownList;
drop.Items.Add(new ListItem(""));
drop.Items.Add(new ListItem("1"));
drop.Items.Add(new ListItem("2"));
drop.Items.Add(new ListItem("3"));
drop.Items.Add(new ListItem("4"));
drop.Items.Add(new ListItem("5"));
}
Для выбора значения из выпадающего списка в каждой строке:
foreach (GridViewRow gr in gridDetaljiNarudzbe.Rows)
{
DropDownList drop = gr.FindControl("DropDownList1") as DropDownList;
// now selecting a value from dropdownlist
int selectednumber = Convert.ToInt32(drop.Text);
}
Теперь моя проблема заключается в том, что у нас есть две записи в сетке, и я хотел бы выбрать значение из второго раскрывающегося списка во 2-й строке (допустим, я сделал это). И когда я нажимаю кнопку первой записи в первой строке, то значение, которое я взял из 2-го выпадающего списка, теперь вставляется в БД, как если бы я выбрал что-то из первого выпадающего списка.
Также я хотел бы знать, возможно ли после того, как что-то было выбрано в выпадающем списке и вставлено в БД, отключить теперь этот раскрывающийся список и превратить его в статический текст, который будет отображать только 5 вместо раскрывающегося списка?
Может кто-нибудь помочь мне с этим, пожалуйста? Я пробовал все, но я еще не преуспел. :/
РЕДАКТИРОВАТЬ:
Когда я выбираю что-то из второй сетки (2-й раскрывающийся список, как вы можете видеть на картинке) и когда я нажимаю кнопку, чтобы оценить первый продукт, я получаю оценку из 2-го раскрывающегося списка, который я выбрал. Теперь стало понятнее?
Спасибо!
Отредактируйте вот код для йога:
List<hsp_Proizvodi_SprijeciDvaPutaOcijeniti_Result> lista = ServisnaKlasa.SprijeciDvostrukoOcjenjivanje(ProizvodID, Sesija.kupac.KupacID);
foreach (GridViewRow gr in gridDetaljiNarudzbe.Rows)
{
if (lista.Count == 0)
{
DropDownList drop = gr.FindControl("DropDownList1") as DropDownList;
if (drop.SelectedIndex != 0)
{
Ocjene o = new Ocjene();
o.KupacID = Sesija.kupac.KupacID;
o.ProizvodID = ProizvodID;
o.Datum = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
o.Ocjena = Convert.ToInt32(drop.Text);
ServisnaKlasa.OcjenjivanjeProizvoda(o);
string poruka = "Proizvod uspješno ocijenjen!";
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + poruka + "');", true);
drop.SelectedIndex = 0;
}
}
else
{
string poruka = "Ovaj proizvod ste već ocijenili!";
ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + poruka + "');", true);
}
}