C# 在GridView中将隐藏字段用作行索引(其数据源是DataTable)
我有一个C# 在GridView中将隐藏字段用作行索引(其数据源是DataTable),c#,asp.net,C#,Asp.net,我有一个GridView1声明为: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" DataKeyNames="Case_ID"> <Columns> <asp:TemplateField> <ItemTemplate><asp:CheckBox ID="cb" runat="
GridView1
声明为:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" DataKeyNames="Case_ID">
<Columns>
<asp:TemplateField>
<ItemTemplate><asp:CheckBox ID="cb" runat="server" /></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="No.">
<ItemTemplate><%# Container.DataItemIndex + 1 %></ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Case Title" DataField="caseTitle"/>
<asp:BoundField HeaderText="Age" DataField="age" />
<asp:BoundField HeaderText="Gender" DataField="gender"/>
<asp:BoundField HeaderText="Treated By" DataField="owner"/>
<asp:BoundField HeaderText="Added Date" DataField="sDate"/>
<asp:BoundField HeaderText="" DataField="Case_ID" Visible="false"/>
</Columns>
</asp:GridView>
我想使用Case\u ID
作为GridView
的索引,以便在GridView
中选中记录的复选框时,可以从数据库中删除记录
对不起,如果我的问题不是那么清楚 我不知道问题到底出在哪里,希望你能帮我 以下是场景:
显示数据库中的案例信息GridView
- 用户可以选中复选框,然后单击[删除]按钮,此操作将从数据库中删除记录李>
Case\u ID
),但我不需要它可见
当我在[删除]按钮中执行此代码时:
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox c = (CheckBox)row.FindControl("cb");
if (c.Checked)
{
int rowIndex = GridView1.SelectedIndex;
string id = GridView1.DataKeys[rowIndex].Value.ToString();
ds.DeleteCommand = " delete from Cases where Case_ID=" + id + "";
ds.Delete();
}
}
没有删除任何内容!我不知道为什么
当GridView
的DataDource
是SqlDataSource
时,它工作,但对于DataTable
则不是
我希望现在天气晴朗
编辑:
*当使用
断点时
我发现c
总是null
即使在检查一些记录时也是如此;因此,问题在于没有检测到复选框中的更改,我该怎么做才能检测到它?* 您可以按如下方式使用数据键命令(删除命令):
protected void GridView1_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete") {
int Case_ID = ((GridView)sender).DataKeys[e.CommandArgument].Values[0].ToString();
// TODO, your delete routine
}
}
您正在使用
int rowIndex = GridView1.SelectedIndex;
在你的循环中。对于每一行,您将获得相同的SelectedIndex
。您不应该从正在枚举的当前行
中编制索引吗?此外,使用调试器单步执行代码,检查变量。这个问题可能会突然向你袭来。如果您正在使用事务,请确保它正在提交
您可以尝试以下方法:
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox c = (CheckBox)row.FindControl("cb");
if (c.Checked)
{
string id = row["Case_ID"].ToString();
ds.DeleteCommand = " delete from Cases where Case_ID=" + id + "";
ds.Delete();
}
}
注意,这是未经测试的代码。您应该按照建议尝试使用ASP.NET提供的现成功能。是的,我想使用Case\u ID作为GridView的索引,这样当我在GridView中选中某个记录的复选框时,我就可以从数据库中删除该记录了。所以,你想知道如何在复选框oncheckchanged
或smth上获取行的Case\u Id
吗?我编辑了这篇文章,请看一看,谢谢。很抱歉我没有得到它,你是什么意思?谢谢你的重播,但我需要使用[删除]按钮删除选中的记录。你有什么想法吗?使用我的示例和GV上的一个命令按钮来删除单个记录。它也不起作用,,此错误消息显示“非invocable成员”System.Web.UI.WebControl.GridView.DataKeys不能像方法一样使用。“它不起作用。”。。我发现这个复选框总是空的,这就是为什么它没有被删除,但是我怎样才能让它检测到这个复选框呢?
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox c = (CheckBox)row.FindControl("cb");
if (c.Checked)
{
string id = row["Case_ID"].ToString();
ds.DeleteCommand = " delete from Cases where Case_ID=" + id + "";
ds.Delete();
}
}