2014-12-04 2 views
0

Я беру grid-view с двумя элементами управления текстовым полем и одним элементом управления checkboxlist. В то время как я добавляю новую строку в grid-view динамически, тогда два текстовых поля содержат значение в предыдущей строке, но элементы в элементе управления checkboxlist не отображаются в предыдущей строке. Я хочу сохранить состояние checkboxlist в предыдущей строке , Как это сделать? Может ли кто-нибудь дать какое-либо предложение?Добавить новую строку в GridView с контролем CheckBoxList и TextBox

 private void FirstGridViewRow() 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr = null; 
    dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
    dt.Columns.Add(new DataColumn("Col1", typeof(string))); 
    dt.Columns.Add(new DataColumn("Col2", typeof(string))); 
    dt.Columns.Add(new DataColumn("Col3", typeof(string))); 
    dt.Columns.Add(new DataColumn("Col4", typeof(string))); 
    dt.Columns.Add(new DataColumn("Col5", typeof(string))); 
    dr = dt.NewRow(); 
    dr["RowNumber"] = 1; 
    dr["Col1"] = string.Empty; 
    dr["Col2"] = string.Empty; 
    dr["Col3"] = string.Empty; 
    dr["Col4"] = string.Empty; 
    dr["Col5"] = string.Empty; 
    dt.Rows.Add(dr); 

    ViewState["CurrentTable"] = dt; 

    grvStudentDetails.DataSource = dt; 
    grvStudentDetails.DataBind(); 
} 



private void AddNewRowbutton_click() 
{ 
    int rowIndex = 0; 

    if (ViewState["CurrentTable"] != null) 
    { 
     DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
     DataRow drCurrentRow = null; 
     if (dtCurrentTable.Rows.Count > 0) 
     { 
      for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
      { 
       TextBox actionitemname = 
        (TextBox)grvStudentDetails.Rows[rowIndex].Cells[1].FindControl("txtName"); 
       TextBox actionduedate = 
        (TextBox)grvStudentDetails.Rows[rowIndex].Cells[2].FindControl("txtAge"); 
       CheckBoxList assignee = (CheckBoxList)grvStudentDetails.Rows[rowIndex].Cells[5].FindControl("chkAssignees"); 
       drCurrentRow = dtCurrentTable.NewRow(); 
       drCurrentRow["RowNumber"] = i + 1; 

       dtCurrentTable.Rows[i - 1]["Col1"] = actionitemname.Text; 
       dtCurrentTable.Rows[i - 1]["Col2"] = actionduedate.Text; 
       //dtCurrentTable.Rows[i - 1]["Col5"] = assignee.SelectedItem.Text; 
       rowIndex++; 
      } 
      dtCurrentTable.Rows.Add(drCurrentRow); 
      ViewState["CurrentTable"] = dtCurrentTable; 
      grvStudentDetails.DataSource = dtCurrentTable; 
      grvStudentDetails.DataBind(); 
     } 
    } 
    else 
    { 
     Response.Write("ViewState is null"); 
    } 
    SetPreviousData(); 
} 

    private void SetPreviousData() 
{ 
    int rowIndex = 0; 
    if (ViewState["CurrentTable"] != null) 
    { 
     DataTable dt = (DataTable)ViewState["CurrentTable"]; 
     if (dt.Rows.Count > 0) 
     { 
      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       TextBox TextBoxName = (TextBox)grvStudentDetails.Rows[rowIndex].Cells[1].FindControl("txtName"); 
       TextBox TextBoxAge = (TextBox)grvStudentDetails.Rows[rowIndex].Cells[2].FindControl("txtAge"); 
       TextBoxName.Text = dt.Rows[i]["Col1"].ToString(); 
       TextBoxAge.Text = dt.Rows[i]["Col2"].ToString(); 
       rowIndex++; 
      } 
     } 
    } 
} 

ответ

0

Вы можете следовать приведенному примеру here.

В ASPX:

<div> 
<asp:gridview ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:BoundField DataField="RowNumber" HeaderText="Row Number" /> 
     <asp:TemplateField HeaderText="Header 1"> 
      <ItemTemplate> 
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Header 2"> 
      <ItemTemplate> 
       <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Header 3"> 
      <ItemTemplate> 
       <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
      <asp:TemplateField HeaderText="Header 4"> 
      <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server"></asp:CheckBox> 
      </ItemTemplate> 
      <FooterStyle HorizontalAlign="Right" /> 
      <FooterTemplate> 
      <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" 
        onclick="ButtonAdd_Click" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
     </Columns> 
    </asp:gridview> 
</div> 

в .cs файле:

private void SetInitialRow() 
    { 
     DataTable dt = new DataTable(); 
     DataRow dr = null; 
     dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column1", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column2", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column3", typeof(string))); 
     dt.Columns.Add(new DataColumn("Column4", typeof(string))); 

     dr = dt.NewRow(); 
     dr["RowNumber"] = 1; 
     dr["Column1"] = string.Empty; 
     dr["Column2"] = string.Empty; 
     dr["Column3"] = string.Empty; 
     dr["Column4"] = string.Empty; 
     dt.Rows.Add(dr); 

     //Store the DataTable in ViewState 
     ViewState["CurrentTable"] = dt; 

     Gridview1.DataSource = dt; 
     Gridview1.DataBind(); 
    } 

    private void AddNewRowToGrid() 
    { 
     int rowIndex = 0; 

     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
      DataRow drCurrentRow = null; 
      if (dtCurrentTable.Rows.Count > 0) 
      { 
       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 
        //extract the TextBox values 
        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 
        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); 
        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3"); 
        CheckBox chkBx = (CheckBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("CheckBox1"); 

        drCurrentRow = dtCurrentTable.NewRow(); 
        drCurrentRow["RowNumber"] = i + 1; 

        dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text; 
        dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text; 
        dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text; 
        dtCurrentTable.Rows[i - 1]["Column4"] = chkBx.Checked.ToString(); 

        rowIndex++; 
       } 

       dtCurrentTable.Rows.Add(drCurrentRow); 
       ViewState["CurrentTable"] = dtCurrentTable; 

       Gridview1.DataSource = dtCurrentTable; 
       Gridview1.DataBind(); 
      } 
     } 
     else 
     { 
      Response.Write("ViewState is null"); 
     } 

     //Set Previous Data on Postbacks 
     SetPreviousData(); 
    } 

    private void SetPreviousData() 
    { 
     int rowIndex = 0; 
     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dt = (DataTable)ViewState["CurrentTable"]; 
      if (dt.Rows.Count > 0) 
      { 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 
        TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2"); 
        TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3"); 
        CheckBox chkBx = (CheckBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("CheckBox1"); 

        box1.Text = dt.Rows[i]["Column1"].ToString(); 
        box2.Text = dt.Rows[i]["Column2"].ToString(); 
        box3.Text = dt.Rows[i]["Column3"].ToString(); 


        chkBx.Checked = dt.Rows[i]["Column4"].ToString().ToUpperInvariant()=="TRUE"; 

        rowIndex++; 
       } 
      } 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      SetInitialRow(); 
     } 
    } 

    protected void ButtonAdd_Click(object sender, EventArgs e) 
    { 
     AddNewRowToGrid(); 
    } 
+0

текстовое поле работает нормально .. я не знаю, как сохранить значение флажок в GridView .. –

+0

вам нужно хранить проверил статус флажка – Arshad

+0

как я могу это сделать .. скажите, пожалуйста, с кодом –

Смежные вопросы