2015-09-10 2 views
1

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

enter image description here

Я хотел создать новую строку в GridView, а нажмите кнопку Добавить, а мой TextBox является получение данных из базы данных. Я пытаюсь запустить код, но ничего не происходит, когда я нажимаю кнопку. Надеюсь, кто-то может помочь. Благодарю.

Мой передний конец кода

<Columns> 
    <asp:TemplateField HeaderStyle-CssClass="display_none"> 
     <ItemTemplate> 
      <asp:Label ID="Label3" runat="server" Font-Bold="true" Font-Size="Medium">Name</asp:Label> 
     </ItemTemplate> 
    </asp:TemplateField> 

    <asp:TemplateField HeaderStyle-CssClass="display_none"> 

     <ItemTemplate> 
      <asp:TextBox ID="TextBox1" runat="server" CssClass="NormalInputTextField" Text='<%#Eval("SLMN") %>'></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderStyle-CssClass="display_none"> 
    <ItemTemplate> 
     <asp:Button ID="BtnDelete" runat="server" Text="Delete" CssClass="btn btn-primary" CommandName="remove" CommandArgument='<%# Container.DataItemIndex %>'/> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField FooterStyle-BorderStyle="None" HeaderStyle-CssClass="display_none"> 
    <ItemTemplate> 
     <asp:Button ID="BtnSearch2" runat="server" Text="Search" CssClass="btn btn-primary" CommandName="ViewComments" OnClientClick="javascript:saveData(this,'grid')"/> 
    </ItemTemplate> 
    <FooterStyle HorizontalAlign="Right" BorderStyle="None"/> 
    <FooterTemplate> 
     <asp:Button ID="BtnAdd" runat="server" Text="Add New Row" CssClass="btn btn-primary" OnClick="ButtonAdd_Click"/> 
    </FooterTemplate> 
    </asp:TemplateField> 
</Columns> 

Мой задний конец кода

private void AddNewRowToGrid() 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr = null; 
    dt.Columns.Add(new DataColumn("Column1", typeof(string))); 
    dt.Columns.Add(new DataColumn("Column2", typeof(string))); 
    dr = dt.NewRow(); 
    dr["Column1"] = string.Empty; 
    dr["Column2"] = string.Empty; 
    dt.Rows.Add(dr); 
} 

Мое событие OnClick для вызова добавить новую функцию

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

Мой GridView тег

<grd:MultiSelectGridView ID="grid2" runat="server" Width="500px" 
         CssClass="paging_gridview" AllowPaging="True" 
         AutoGenerateColumns ="false" PageSize="10" PagerType="Custom" 
         ShowFooter="true" OnRowDeleting="grid2_RowDeleting" 
         MultiSelectDataKeyName="Urid,Name" ShowHeaderWhenEmpty="true" 
         MultiSelectColumnIndex="0" EnableMultiSelect="false" GridLines="None" BorderStyle="None" OnRowCommand="grid2_RowCommand" 
         > 

я связать свою запись в GridView на странице загрузки

protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!Page.IsPostBack) 
      { 
Loadgrid(); 
} 
} 

     private void Loadgrid() 
      { 
       string branch = txtBranch.Text.Trim(); 
       string name = txtName.Text.Trim(); 

       string sql = "SELECT * FROM fcs_cotmdl WHERE TMDL= '" + name + "'AND CONO='" + branch + "' "; 

       SqlDataSource2.ConnectionString = ConfigurationManager.ConnectionStrings["ConnStr_epsi"].ConnectionString; 
       SqlDataSource2.ConnectionString = SqlDataSource2.ConnectionString.Replace("Provider=OraOLEDB.Oracle.1;", ""); 
       SqlDataSource con = new SqlDataSource(); 

       SqlDataSource2.SelectCommand = sql; 
       grid2.DataSourceID = "SqlDataSource2"; 
       grid2.DataBind(); 

      } 
+0

Вы создаете новый DataTable, добавляете один пустой 'DataRow', а затем ничего не делаете с этой таблицей. Вы действительно ожидаете, что этот код добавит новую строку в существующий DataSource? Правильный способ - загрузить «DataSource» из базы данных, поскольку он мог быть изменен тем временем. Затем вы можете легко добавить другую строку. После этого вы назначаете его как DataSource для своего GridView и вызываете 'DataBind'. –

+0

Я еще не смотрел на вашу стену кода, но тот факт, что вы создаете экземпляр нового экземпляра 'DataTable' вместо того, чтобы извлекать существующий, выглядит довольно подозрительно. –

+0

Я не вижу связи/привязки между вашим данным и gridview. – DarkKnight

ответ

0

После обучающая детали точно такой же сценарий. Пожалуйста, обратитесь к нему. Adding Dynamic Rows to Gridview on Button Click

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"); 
//Instead of all the textboxes, use the button as you require. 
        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(); 
    } 

А потом SetPreviousData() Функция:

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

Тогда внутри Click Event:

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

из метода Load сетки вы должны получить данные в виде данных таблицы и привязки к сетке. И сохранить в сессии. Например:

private void Loadgrid() 
     { 

      var dt = new DataTable(); 

      using (var conn = new SqlConnection (ConfigurationManager.ConnectionStrings["ConnectionStringName"].ToString())) 
      { 

       var command = new SqlCommand(); 
       command.Connection = conn; 
       command.CommandText = "SELECT * FROM [dbo].[T1]"; 
       command.CommandType = CommandType.Text; 
       using (var adaptor = new SqlDataAdapter(command)) 
       { 
        if (conn.State == ConnectionState.Closed) conn.Open(); 
        adaptor.Fill(dt); 
        if (conn.State == ConnectionState.Open) conn.Close(); 
       } 

      } 

       Session["ss"] = dt; 
       grid2.DataSource = dt; 
       grid2.DataBind(); 

      } 


private void AddNewRowToGrid() 
     { 
      DataTable dt = (DataTable) Session["ss"]; 
      DataRow dr = null; 
      DataRow newBlankRow1 = dt.NewRow(); 
      dt.Rows.Add(newBlankRow1); 
      grid2.DataSource = dt; 
      grid2.DataBind(); 

      Session["ss"] = dt; 
     } 

После добавления пустой строки также необходимо снова привязать данные к сетке.

+0

DataTable dt = ToDataTable (res); - >> res не является содержимое в текущем контексте ... – Jan

+0

Не нужно использовать преобразование данных. Я отредактировал свой ответ .. См. .. – temUser

+0

показ программы Нет данных для отображения – Jan

Смежные вопросы