2011-12-23 3 views
1

мне было интересно, если GridView может сделать следующее:GridView Возможности

  1. Позволяет пользователю добавить новую пустую строку.
  2. Пусть строка будет первой в сетке.
  3. Выделите строку и в режиме редактирования, чтобы пользователь мог добавлять информацию.

ответ

2

Там пример здесь: http://www.dotnetfunda.com/articles/article180.aspx

Это должно быть достаточно легко поставить форму, которая обрабатывает новую запись в верхней части, а не на дне.

+0

На самом деле мне нравится его метод строки с указанием в сноске. Благодаря! – Craig

0

То, что я делал в прошлом, добавляет новую, пустую строку данных в верхнюю часть таблицы данных с идентификатором -1 (или если идентификатор строки «новый» или «пустой»). Установите индекс редактирования в эту строку и привяжите данные.

(Быстрый и грязный пример)

<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(); 
    } 
Смежные вопросы