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.
InformationsquelleAutor Ruby | 2013-08-13
Schreibe einen Kommentar