简体   繁体   English

使用CheckBoxList控件和TextBox在GridView中添加新行

[英]Add a new row in GridView with CheckBoxList control and TextBox

I am taking a grid-view with two text-box control and one checkboxlist control. 我正在使用带有两个文本框控件和一个checkboxlist控件的网格视图。 While I am adding a new row in grid-view dynamically, then the two text-box contain the value in the previous row but the items in checkboxlist control not displayed in previous row.I want to maintain the state of checkboxlist in the previous row. 当我在网格视图中动态添加新行时,两个文本框包含上一行的值,但checkboxlist控件中的项目未显示在上一行中。我想保持上一行的checkboxlist状态。 How to do this? 这个怎么做? Can anyone give any suggestion? 有人可以提出任何建议吗?

     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++;
             }
         }
     }
 }

You can follow example shown here . 您可以按照此处显示的示例进行操作。

In aspx: 在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>

in .cs file : 在.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();
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM