Postback Reset der selectedValue der DropdownList innerhalb GridView
Meine gridview hat 2 Spalten - DropDownList - & TextBox. Die DDL ist die Datenbindung, die von einer datatable. Der SelectedIndex-Eigenschaft Ändern von DDL füllen Sie Ihre Textfeld, und auch eine neue Zeile hinzuzufügen. All dies funktioniert gut, aber die ausgewählten Werte der DDLs der vorherigen Zeilen, auf 0 zurückgesetzt index, wenn eine neue Zeile Hinzugefügt wird.Die textbox-Werte intakt bleiben, obwohl. Wie kann ich behalten, die DDL ausgewählten Werte, wenn neue Zeilen Hinzugefügt werden.
ZB. wenn ich select 'abc' aus dem dropdown-Menü Zeile 1, es füllt seine text-Feld und fügt auch eine neue Zeile. Aber mit dem postback geschieht, abc bleibt nicht ausgewählt, in Zeile 1 ddl:
LOGIN TELEFON 1 123456789 2
ASPX:
<asp:GridView ID="gvCommissions" runat="server"
OnRowDataBound="gvCommissions_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="LOGIN" ItemStyle-Width="29%">
<ItemTemplate>
<asp:DropDownList ID="ddlLogin" runat="server" Width="98%"
DataTextField="login" DataValueField="id"
OnSelectedIndexChanged="ddlLogin_SelectedIndexChanged" AutoPostBack="true" >
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="PHONE" ItemStyle-Width="12%">
<ItemTemplate>
<asp:TextBox ID="txtPhone" runat="server" Width="98%"
Text='<%# Eval("phone")%>' Enabled="false"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CODE HINTER:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//Get values from DB, store to a datatable and then to a viewstate
GetAgentDetails();
//Adds an empty row to grid
SetInitialRow();
}
}
private void AddNewRow()
{
//Create a datatable
dtCurrentData = new DataTable();
dtCurrentData.Columns.Add("phone");
//Store values of each row to a new datarow. Add all rows to datatable
foreach (GridViewRow gvRow in gvCommissions.Rows)
{
DataRow drcurrentrow = dtCurrentData.NewRow();
drcurrentrow["phone"] = ((TextBox)gvRow.FindControl("txtphone")).Text;
dtCurrentData.Rows.Add(drcurrentrow);
}
//create an empty datarow and also add it to the new datatable.
DataRow dr = dtCurrentData.NewRow();
dr["phone"] = "";
dtCurrentData.Rows.Add(dr);
//Bind the new datatable to the grid
gvCommissions.DataSource = dtCurrentData;
gvCommissions.DataBind();
}
protected void gvCommissions_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("ddlLogin");
dtAgents = (DataTable)ViewState["AgentsTable"];
ddl.DataSource = dtAgents;
ddl.DataBind();
ddl.Items.Insert(0, "");
}
}
- Bitte lassen Sie mich wissen, wenn Sie würde auch gerne die Funktionen im pageLoad.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die databind-Methode in AddNewRow, die original-Zeilen verloren gehen. Sie müssen speichern Sie die dropdown ausgewählt-index, zusammen mit Ihrer textbox Handy Wert in dtCurrentData. Anschließend können Sie den index des dropdowns in Ihrem RowDataBound-Ereignis, mit dem Ihre gespeicherten Werte in dtCurrentData.
RowDataBound
gefeuert wird jedes mal (unabhängig davon, ob die SeitePostBack
Seite oder NICHT).Müssen Sie hinzufügen, dass
if(!IsPostBack)
Bedingung um den code, wo Sie die Datenbindung für die dropdowns in IhremRowDataBound
Veranstaltung.