刘杰瑞 2021-09-09 21:31 采纳率: 90.9%
浏览 40
已结题

ASP.net webform Gridview可以做一个插入行吗?

大家好,我的问题是gridview好像只有编辑和删除,选中。能用c#为他写一个插入的功能吗? 还有一个问题是gridview修改样式,有什么好的方案吗?用css是不是不太行?新人入门,请教一下大家。

  • 写回答

1条回答 默认 最新

  • Yijing Sun 2021-09-10 10:03
    关注

    您好,

    能用c#为他写一个插入的功能吗?

    你可以参照以下代码:
    首先你需要写一个gridview.

    <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>
    
                <FooterStyle HorizontalAlign="Right" />
    
                <FooterTemplate>
    
                 <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" />
    
                </FooterTemplate>
    
            </asp:TemplateField>
    
            </Columns>
    
    </asp:gridview>
    
    

    在这里我们给grid view 设置一个初始数据,我们用datatable 绑定grid view.

     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)));
    
            dr = dt.NewRow();
    
            dr["RowNumber"] = 1;
    
            dr["Column1"] = string.Empty;
    
            dr["Column2"] = string.Empty;
    
            dr["Column3"] = string.Empty;
    
            dt.Rows.Add(dr);
    
            //dr = dt.NewRow();
    
     
    
            //Store the DataTable in ViewState
    
            ViewState["CurrentTable"] = dt;
    
     
    
            Gridview1.DataSource = dt;
    
            Gridview1.DataBind();
    
        }
    
    

    在page_load中调用上述方法:

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

    创建单击按钮生成行的方法:

    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");
    
     
    
                        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;
    
     
    
                        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();
    
        }
    
    

    从 ViewState 中获取先前存储的数据,并将其中存储的数据设置到 DataTable 中,以便可以根据从 TextBox 输入的值添加一个新行:

      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");
    
     
    
                        box1.Text = dt.Rows[i]["Column1"].ToString();
    
                        box2.Text = dt.Rows[i]["Column2"].ToString();
    
                        box3.Text = dt.Rows[i]["Column3"].ToString();
    
     
    
                        rowIndex++;
    
                    }
    
                }
    
            }
    
        }
    
    

    按钮单击事件:

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

    还有一个问题是gridview修改样式,有什么好的方案吗?用css是不是不太行

    Css 可以做简单的样式,你想要什么样式?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日
  • 创建了问题 9月9日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!