我有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>
这是DataTable
我用作DataSource
DataTable aTable = new DataTable();
aTable.Columns.Add("caseTitle", typeof(string));
aTable.Columns.Add("age", typeof(string));
aTable.Columns.Add("gender", typeof(string));
aTable.Columns.Add("owner", typeof(string));
aTable.Columns.Add("sDate", typeof(string));
aTable.Columns.Add("Case_ID", typeof(int));
我想使用Case_ID
作为GridView
的索引,因此当我选中GridView
中的复选框时,我可以从数据库中删除记录。
对不起,如果我的问题不是那么清楚..
我不知道问题究竟在哪里,我希望你能帮助我。
这是场景:
GridView
显示数据库中的案例信息因此我需要在GridView中使用主键(Case_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();
}
}
没有删除!我不知道为什么!
当DataDource
的{{1}}为GridView
时,它正在工作,但SqlDataSource
却不是。{/ p>
我希望现在明白。
修改 的
*使用DataTable
时,即使我正在查看某些记录,我发现breakpoints
始终是c
;所以问题是它没有检测到null
我可以做些什么来改变它? *
答案 0 :(得分:0)
您可以在RowCommand(删除命令)上使用DataKey,如下所示:
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
}
}
答案 1 :(得分:0)
您正在使用
int rowIndex = GridView1.SelectedIndex;
你的循环中的。对于每一行,您将获得相同的SelectedIndex
。您是否应该从当前列举的row
索引?此外,使用调试器逐步执行代码,检查变量。问题可能会突然发生在你身上。如果您使用的是交易,请确保它正在提交。
您可以尝试以下方式:
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提供的pistipanko建议的内容。