2011-12-23 73 views
1

我想知道如果GridView可以做到以下几点:GridView控件功能

  1. 允许用户添加新的空行。
  2. 该行是网格中的第一个。
  3. 是否已选择该行并且处于编辑模式,以便用户可以添加信息。

回答

0

我过去所做的是在数据表顶部添加一个新的空数据行,ID为-1(或者如果字符串ID为“new”或“empty”)。将编辑索引设置为该行并绑定数据。

(快速和肮脏的例子)

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" 
      onrowupdating="GridView1_RowUpdating"> 
      <Columns> 
       <asp:TemplateField HeaderText="Column 1"> 
        <ItemTemplate> 
         <asp:Literal ID="litColumn1" Text='<%#Bind("column1") %>' runat="server"></asp:Literal> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtColumn1" Text='<%#Bind("column1") %>' runat="server"></asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Column 2"> 
        <ItemTemplate> 
         <asp:Literal ID="litColumn2" Text='<%#Bind("column2") %>' runat="server"></asp:Literal> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtColumn2" Text='<%#Bind("column2") %>' runat="server"></asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Column 3"> 
        <ItemTemplate> 
         <asp:Literal ID="litColumn3" Text='<%#Bind("column3") %>' runat="server"></asp:Literal> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtColumn3" Text='<%#Bind("column3") %>' runat="server"></asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <EditItemTemplate> 
         <asp:LinkButton ID="saveLink" runat="server" CommandName="update">Save</asp:LinkButton> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

而对于后面的代码:

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

    private void Fill_Grid() 
    { 
     //Create new test data source and columns 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("ID"); 
     dt.Columns.Add("column1"); 
     dt.Columns.Add("column2"); 
     dt.Columns.Add("column3"); 

     //Sample data 
     DataRow dr = dt.NewRow(); 
     dr["ID"] = 1; 
     dr["column1"] = "test1.1"; 
     dr["column2"] = "test1.2"; 
     dr["column3"] = "test1.3"; 
     dt.Rows.Add(dr); 

     dr = dt.NewRow(); 
     dr["ID"] = 2; 
     dr["column1"] = "test2.1"; 
     dr["column2"] = "test2.2"; 
     dr["column3"] = "test2.3"; 
     dt.Rows.Add(dr); 

     //Empty row at the top 
     dr = dt.NewRow(); 
     dr["ID"] = -1; //-1 is for new rows only 
     dt.Rows.InsertAt(dr, 0); //inserting at 0th position of table 

     //Bind data 
     GridView1.DataSource = dt; 
     GridView1.EditIndex = 0; 
     GridView1.DataBind(); 
    } 

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     //Check ID 
     if (e.Keys[0].ToString() == "-1") 
     { 
      //is a new row, insert data 
     } 
     else 
     { 
      //is an update, save data 
     } 

     //Rebind data 
     Fill_Grid(); 
    }