【发布时间】:2022-05-04 05:06:10
【问题描述】:
这是我的程序,页面加载gridview并将数据库记录检索到文本框,我放了一个添加新按钮,希望添加与该行完全相同的新行,但文本框为空。
我想在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();
}
【问题讨论】:
-
您创建一个新的 DataTable,添加一个空的
DataRow,然后您对该表什么也不做。您真的希望这段代码向现有数据源添加新行吗?正确的方法是从数据库加载DataSource,因为它可能同时被更改。然后您可以轻松地添加另一行。然后你将它作为 DataSource 分配给你的 GridView 并调用DataBind。 -
我还没有看过你的代码墙,但是你正在实例化一个新的
DataTable实例而不是获取现有实例这一事实看起来很可疑。 -
我没有看到您的数据表和 gridview 之间的连接/绑定。
-
获取你的dataTable,通过它绑定你的gridview,然后将你新创建的行添加到旧的datatable,然后重新绑定你的gridview。
-
@TimSchmelter 嗨,我不知道该怎么做...我希望新行与文本框中具有数据库记录的现有行相同,但前提是新行文本框为空。 .