2009-12-11 4 views
0

Я только начинаю использовать управление ASP.NETGridView.ASP.NET Grid View Добавить новую строку

Я думал о добавлении "Add New Row"Button к Footer, чтобы добавить новый DataRow к GridView.

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

Есть ли способ отображения GridView только с нижним колонтитулом и без строк данных или мне нужно прибегнуть к kludge?

ответ

1

Вы изучили подкласс GridView и переопределили его метод CreateChildControls (и, возможно, некоторые методы визуализации, если это необходимо)?

Возможно, вы сможете изменить свое поведение по умолчанию. Если это возможно, это будет менее неприятным, чем добавление пустых строк.

+0

Хорошее предложение. Но это, должно быть, было сделано раньше, предпочтительно в VB.NET, поэтому я могу учиться и модифицировать по мере необходимости. – ChadD

+0

Если это было сделано раньше, у Google наверняка есть что-то. В противном случае у вас всегда есть IntelliSense и Refgate Reflector, если это необходимо. –

1

ASP.NET DataGrid ничего не отображает (или, если нужно, указать только значение «Нет данных данных», если в нем нет строк. Мы хотели показать хотя бы заголовок сетки, даже если никаких данных или строк не было. Один трюк, который мы сделали в прошлом, состоит в том, чтобы добавить пустую строку в сетку. Это приведет к тому, что заголовок/нижний колонтитул появится. В случае с заголовком мы позиционировали div над пустой строкой с каким-то красиво сформированным текстом ... просто для этого.

+0

+1 Да, я думал об этом, но считаю это клоч. Я удивлен, что сетка не поддерживает его. Еще глядя ... – ChadD

0

Я не знаю, будет ли это работать. Но у нас была аналогичная проблема с Telerik RadGrid-> Сетка не отображается, если datasource = null. По какой-то причине, хотя у него был «шаблон без записей», он не работал. параметр datasource = new object [] {} сделал трюк, он показал пустую сетку. мои 2 цента

0

здесь использовать этот код

protected void Page_Load(object sender, EventArgs e) 
    { 
     lblError.Text = ""; 
     if (!IsPostBack) 
     { 
      SetInitialRow(); 
     } 

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


     dr = dt.NewRow(); 
     dr["RowNumber"] = 1; 

     dt.Rows.Add(dr); 
     dt.TableName = "Coupons"; 
     //Store the DataTable in ViewState 
     ViewState["CurrentTable"] = dt; 

     Gridview1.DataSource = dt; 
     Gridview1.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 box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 

        drCurrentRow = dtCurrentTable.NewRow(); 
        drCurrentRow["RowNumber"] = i + 1; 
        drCurrentRow["Column1"] = box1.Text; 

        rowIndex++; 

       } 

       //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 
       Gridview1.DataSource = dtCurrentTable; 
       Gridview1.DataBind(); 
      } 
     } 
     else 
     { 
      Response.Write("ViewState is null"); 
     } 

     //Set Previous Data on Postbacks 
     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 box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1"); 


        box1.Text = dt.Rows[i]["Column1"].ToString(); 

        rowIndex++; 

       } 
      } 
     } 
    } 

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

и для кода ASPX

         <asp:GridView ID="Gridview1" runat="server" Style="text-align: center" ShowFooter="true" Width="70% " 
              AutoGenerateColumns="false"> 
              <Columns> 
               <asp:BoundField DataField="RowNumber" HeaderText="Sr No" HeaderStyle-BackColor="#99CCCC" /> 
               <asp:TemplateField HeaderText="Coupon Code" HeaderStyle-BackColor="#99CCCC"> 
                <ItemTemplate> 
                 <asp:TextBox ID="TextBox1" MaxLength="10" CssClass="form-control" runat="server"></asp:TextBox> 
                </ItemTemplate> 


                <FooterStyle HorizontalAlign="Right" /> 
                <FooterTemplate> 
                 <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" CssClass="btn-toolbar btn" OnClick="ButtonAdd_Click" /> 
                </FooterTemplate> 
               </asp:TemplateField> 
              </Columns> 

              <%-- <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />--%> 
              <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" /> 
              <RowStyle BackColor="White" ForeColor="#003399" /> 
              <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" /> 
              <SortedAscendingCellStyle BackColor="#EDF6F6" /> 
              <SortedAscendingHeaderStyle BackColor="#0D4AC4" /> 
              <SortedDescendingCellStyle BackColor="#D6DFDF" /> 
              <SortedDescendingHeaderStyle BackColor="#002876" /> 
             </asp:GridView> 

его только один столбец у пройти через код и добавить несколько столбцов, если и хотите У меня есть 4column grid с функцией удаления в нем проверьте эту ссылку для этого поиска для моего комментария How to delete a row using delete button for specific row in grid view?

или вы можете использовать этот тоже Simple Insert Select Edit Update and Delete in ASP.Net GridView control

+1

работает просто отлично, попробуйте –