none
请问GridView中自动生成的“新建”按钮为什么无效?为什么微软不提供OnRowInserting这样的事件? RRS feed

  • 问题

  • 我觉得GridView控件,对编辑、删除等功能支持得很好,程序员编写代码时,可以不用知道数据表中的列。
    foreach(DictionaryEntry newValuesEntry in e.NewValues)

    foreach (DictionaryEntry keysEntry in e.Keys)
    等都是事件中很好的用法。

    但为什么自动生成的“新建”按钮无效?为什么微软不提供OnRowInserting这样的事件?是不是GridView是一个过时的控件?(我用的.net框架是4.6.1) 

    不想手动绑定数据列。这样已经编写好的组件就更好发挥作用,开发速度更快。我希望在表层编码的程序员,在很多时候,不用知道数据库就可以写增、删、改、读。

    请问GridView中自动生成的“新建”按钮为什么无效?为什么微软不提供OnRowInserting这样的事件?请问如果不想手动绑定数据列,在GridView中新增一行,用什么方法可以很好的实现?或是哪个控件比它更好?请各位赐教。
    2018年3月1日 15:06

全部回复

  • 你好,

    因为webform本身的问题,现在主流的开发都不用这套框架了。

    现在用的比叫多的是MVVM或者MVC。

    其次,据我所知没有onrowinsert这个事件,因为没有必要。

    正常我们会写一个BUTTON来触发insert。

    然后在他的button click事件里面写插入数据库的代码。

    插入成功后再重新绑定gridview。

    另外,你也可以再girdview里面用FooterTemplate里面设置一些textbox和button

    然后在选择换行的时候写代码插入到数据库。

    代码例子如下:

    <!DOCTYPE html>
    
     
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head runat="server">
    
        <title>How to Insert new row in GridView</title>
    
    </head>
    
    <body>
    
        <form id="form1" runat="server">
    
        <div>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CellPadding="4"  
    
             ForeColor="#333333" ShowFooter="True"
    
             OnSelectedIndexChanging="GridView1_SelectedIndexChanging" >
    
              <Columns>
    
               <asp:TemplateField>
    
                  <FooterTemplate>
    
                   <asp:LinkButton ID="LkB1" runat="server" CommandName="Select">Insert</asp:LinkButton>
    
                  </FooterTemplate>
    
               </asp:TemplateField>
    
               <asp:TemplateField HeaderText="Name">
    
                  <ItemTemplate>
    
                     <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
    
                  </ItemTemplate>
    
                  <FooterTemplate>
    
                     <asp:TextBox ID="txt_Name" runat="server"></asp:TextBox>
    
                   </FooterTemplate>
    
               </asp:TemplateField>
    
               <asp:TemplateField HeaderText="Branch">
    
                   <ItemTemplate>
    
                      <asp:Label ID="Label2" runat="server" Text='<%# Eval("Branch")%>'></asp:Label>
    
                   </ItemTemplate>
    
                   <FooterTemplate>
    
                      <asp:TextBox ID="txt_Branch" runat="server"></asp:TextBox>
    
                   </FooterTemplate>
    
                </asp:TemplateField>
    
                <asp:TemplateField HeaderText="City">
    
                   <ItemTemplate>
    
                      <asp:Label ID="Label3" runat="server" Text='<%# Eval("City") %>'></asp:Label>
    
                   </ItemTemplate>
    
                   <FooterTemplate>
    
                      <asp:TextBox ID="txt_City" runat="server"></asp:TextBox>
    
                   </FooterTemplate>
    
                </asp:TemplateField>
    
              </Columns> 
    
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />       
    
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    
            </asp:GridView>
    
        </div>
    
        </form>
    
    </body>
    
    </html>

    后台:

    using System.Data;
    
    using System.Data.SqlClient;
    
     
    
    public partial class GridView_Insertrow : System.Web.UI.Page
    
    {
    
        // sql connection
    
        SqlConnection con = new SqlConnection(@"Data Source=JITESH-PC\SQL;Initial
    
                                                                                      Catalog=db_Student;Integrated Security=True");
    
        protected void Page_Load(object sender, EventArgs e)
    
        {
    
            if (!IsPostBack)
    
            {
    
                BindGridView();
    
            }
    
        }
    
     
    
        //method for binding GridView
    
        protected void BindGridView()
    
        {
    
            DataTable dt = new DataTable();
    
            SqlDataAdapter da = new SqlDataAdapter("Select ID, Name,Branch,City from tbl_student", con);
    
            con.Open();
    
            da.Fill(dt);
    
            con.Close();
    
     
    
            if (dt.Rows.Count > 0)
    
            {
    
                GridView1.DataSource = dt;
    
                GridView1.DataBind();
    
            }
    
        }
    
     
    
        // insert new record in database
    
        protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    
        {
    
            // find values for update
    
            TextBox txtname = (TextBox)GridView1.FooterRow.FindControl("txt_Name");
    
            TextBox txtbranch = (TextBox)GridView1.FooterRow.FindControl("txt_Branch");
    
            TextBox txtcity = (TextBox)GridView1.FooterRow.FindControl("txt_City");
    
     
    
            // insert values into database
    
            SqlCommand cmd = new SqlCommand("insert into tbl_student(Name, Branch, City)
    
                              values('" + txtname.Text + "','" + txtbranch.Text + "','" + txtcity.Text + "')", con);
    
            con.Open();
    
            cmd.ExecuteNonQuery();
    
            con.Close();
    
     
    
            BindGridView();
    
        }
    
    }


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年3月2日 2:11