如何将新行动态添加到Gridview

在本文中,我将解释如何使用c#在asp.net的网格视图中动态添加带有模板字段的行。

为此,您将需要编写3个函数。

假设我们有一个网格视图,将在其中添加主题,注释,发言人姓名,时间,顺序,特定事件的开始和结束。

这是GridView的ASP.NET代码:


<asp:GridView ID="gvSpeakersAgenda" runat ="server"
              AutoGenerateColumns ="false" Width ="100%"
              GridLines="None" CssClass="mGrid" 
              PagerStyle-CssClass="pgr"
              AlternatingRowStyle-CssClass="alt"
              HeaderStyle-CssClass="headercss">
  <Columns>
    <asp:TemplateField HeaderText ="Order">
      <ItemTemplate>
        <asp:TextBox ID ="txtOrder" ReadOnly ="true" runat ="server" Width ="40px"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="Subject">
      <ItemTemplate>
        <asp:TextBox ID="txtSubject" Width ="145px" runat ="server" TextMode ="MultiLine"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="Speaker">
      <ItemTemplate>
        <asp:DropDownList ID ="ddlSpeakers" runat="server"></asp:DropDownList>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="Time">
      <ItemTemplate>
        <asp:TextBox ID="txtTime" runat ="server" Width ="60px"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="Note">
      <ItemTemplate>
        <asp:TextBox ID="txtNote" Width ="145px" runat ="server" TextMode ="MultiLine"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="Start" Visible ="false">
      <ItemTemplate>
        <asp:TextBox ID="txtStart" runat ="server" Width ="100px" ReadOnly ="true"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText ="End" Visible="false">
      <ItemTemplate >
        <asp:TextBox ID ="txtEnd" runat ="server" Width ="100px" ReadOnly ="true"></asp:TextBox>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView> 
我们将编写以下三个函数。

private void SetInitialRow()
        {
            DataTable dt = new DataTable();
            DataRow dr = null; 
            dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
            dt.Columns.Add(new DataColumn("Subject", typeof(string)));
            dt.Columns.Add(new DataColumn("Speaker", typeof(string)));
            dt.Columns.Add(new DataColumn("Time", typeof(string)));
            dt.Columns.Add(new DataColumn("Note", typeof(string)));
            dt.Columns.Add(new DataColumn("Order", typeof(string)));
            dt.Columns.Add(new DataColumn("Start", typeof(string)));
            dt.Columns.Add(new DataColumn("End", typeof(string)));
            dr = dt.NewRow();
            dr["RowNumber"] = 1;
            dr["Subject"] = string.Empty;
            dr["Speaker"] = string.Empty;
            dr["Time"] = string.Empty;
            dr["Note"] = string.Empty;
            dr["Order"] = string.Empty;
            dr["Start"] = string.Empty;
            dr["End"] = string.Empty;
            dt.Rows.Add(dr);   
            ViewState["CurrentTable"] = dt;  
            gvSpeakersAgenda.DataSource = dt;
            gvSpeakersAgenda.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 txtSubject = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[0].FindControl("txtSubject");
                        DropDownList ddlSpeakers = (DropDownList)gvSpeakersAgenda.Rows[rowIndex].Cells[1].FindControl("ddlSpeakers");
                        TextBox txtTime = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[2].FindControl("txtTime");
                        TextBox txtNote = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[3].FindControl("txtNote");
                        TextBox txtOrder = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[4].FindControl("txtOrder");
                        TextBox txtStart = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[5].FindControl("txtStart");
                        TextBox txtEnd = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[6].FindControl("txtEnd");
                        drCurrentRow = dtCurrentTable.NewRow();
                        drCurrentRow["Subject"] = txtSubject.Text;
                        drCurrentRow["Speaker"] = ddlSpeakers.Text;
                        drCurrentRow["Time"] = txtTime.Text;
                        drCurrentRow["Note"] = txtNote.Text;
                        // int order = Convert.ToInt32(txtOrder.Text);
                        drCurrentRow["Order"] = txtOrder.Text;
                        drCurrentRow["Start"] = txtStart.Text;
                        drCurrentRow["End"] = txtEnd.Text;
                        //drCurrentRow["Order"] = order + 1;
                        rowIndex++;
                        txtSubject.Focus();
                        txtOrder.ReadOnly = true;
                    } 
                    //add new row to DataTable 
                    dtCurrentTable.Rows.Add(drCurrentRow); 
                    //Store the current data to ViewState 
                    ViewState["CurrentTable"] = dtCurrentTable;   
                    //Rebind the Grid with the current data
                    gvSpeakersAgenda.DataSource = dtCurrentTable;
                    gvSpeakersAgenda.DataBind(); 
                } 
            } 
            else
            { 
                Response.Write("ViewState is null"); 
            }   
            //Set Previous Data on Postbacks 
            SetPreviousData(); 
        } 
SetPreviousData()方法将如下所示

 private void SetPreviousData()
        {
            int rowIndex = 0;
            if (ViewState["CurrentTable"] != null)
            {
                DataTable dt = (DataTable)ViewState["CurrentTable"]; 
                if (dt.Rows.Count > 0)
                {
                    for (int i = 1; i < dt.Rows.Count; i++)
                    {
                        TextBox txtSubject = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[0].FindControl("txtSubject");
                        DropDownList ddlSpeakers = (DropDownList)gvSpeakersAgenda.Rows[rowIndex].Cells[1].FindControl("ddlSpeakers");
                        TextBox txtTime = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[2].FindControl("txtTime");
                        TextBox txtNote = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[3].FindControl("txtNote");
                        TextBox txtOrder = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[4].FindControl("txtOrder");
                        TextBox txtStart = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[5].FindControl("txtStart");
                        TextBox txtEnd = (TextBox)gvSpeakersAgenda.Rows[rowIndex].Cells[6].FindControl("txtEnd");
                        txtSubject.Text = dt.Rows[i]["Subject"].ToString();
                        ddlSpeakers.Text = dt.Rows[i]["Speaker"].ToString();
                        txtTime.Text = dt.Rows[i]["Time"].ToString();
                        txtNote.Text = dt.Rows[i]["Note"].ToString();
                        txtOrder.Text = dt.Rows[i]["Order"].ToString();
                        txtStart.Text = dt.Rows[i]["Start"].ToString();
                        txtEnd.Text = dt.Rows[i]["End"].ToString();
                        txtOrder.ReadOnly = true;
                        rowIndex++;
                    }
                }
            }
        } 
现在放置一个按钮,并在该按钮的click事件上只需调用方法AddNewRowToGrid()

From: https://bytes.com/topic/asp-net/insights/942055-how-add-new-row-gridview-dynamically

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值