我的表里有8列我要在这8列前动态添加一个模班列,在其中嵌入CheckBox,然后显示在DataGrid里,让用户可以选中。可是我没法判断用户选中没有,原因是我根本搜索不到checkbox这个控件,用FindControl也找不到,
我调试后发现,items[1].cell里也只有原来那8列,可datagrid显示的是正确的,加上那个模班列倒是9列,不知怎么回事。我是先动态添加这个嵌入CheckBox的这个模班列并为它把edit item都附上了checkbox,然后用生成datatable.defaultview来为datagrid添加datasource,是不是我的流程有问题到底什么问题啊,真是疑惑?
string DeleteCmd = "DELETE FROM ygwage WHERE ygid = @ygid AND wagedate BETWEEN @LowerDate AND @UpperDate";
//And dixin=@dixin";
SqlCommand MyCommand = new SqlCommand(DeleteCmd, MyConnection);
MyCommand.Parameters.Add("@ygid", SqlDbType.Int);
MyCommand.Parameters.Add(new SqlParameter("@LowerDate", SqlDbType.DateTime));
MyCommand.Parameters["@LowerDate"].Value = Convert.ToDateTime(TextBox2.Text);
MyCommand.Parameters.Add(new SqlParameter("@UpperDate", SqlDbType.DateTime));
MyCommand.Parameters["@UpperDate"].Value = Convert.ToDateTime(TextBox3.Text);
bool IsChecked = false;
// 此回圈判断哪些核取方块已被勾选,并将相对应的资料记录删除。
foreach (DataGridItem CheckBoxItem in DataGrid1.Items)
{
IsChecked = ((CheckBox)CheckBoxItem.FindControl("CB")).Checked;
// if(IsChecked==false)
// {
// Page.RegisterStartupScript("Alert","<script language=javascript>alert('请选择要删除的项!');</script>");
// }
if (IsChecked)
{
// 取得使用者欲删除之资料记录的主索引键(亦即员工编号)
// 然後将它指派给 DELETE 命令叙述中的参数。
MyCommand.Parameters["@ygid"].Value =DataGrid1.DataKeys[CheckBoxItem.ItemIndex];
//MyCommand.Parameters["@dixin"].Value =DataGrid1.DataKeys[CheckBoxItem.ItemIndex];
MyCommand.Connection.Open();
try
{
// 呼叫 ExecuteNonQuery() 方法以便针对资料来源执行 DELETE 命令
MyCommand.ExecuteNonQuery();
Message1.Text = "成功删除";
Message1.Visible=true;
//Page.RegisterStartupScript("Alert","<script language=javascript>alert('成功删除!');</script>");
}
catch
//(SqlException)
{
Message.Text = "错误: 无法删除资料纪录";
//Response.Write("<script>alert('删除失败!');history.back();</Script>");
}
MyCommand.Connection.Close();
}
}
// 重新系结至资料来源
BindGridToSource();
这个我用过,关键是怎么能找到动态添加的checkbox
<ItemTemplate>
<INPUT name="chkItem" type="checkbox" value='<%# DataBinder.Eval(Container, "DataItem.id") %>' class="nonebg">
</ItemTemplate>
</asp:TemplateColumn>
// 自己加个按钮触发,看看就明白了
private void Button1_Click(object sender, System.EventArgs e)
{
if(Request.Form.GetValues("chkItem").Length > 0)
{
Response.Write(Request.Form.Get("chkItem");
}
}
<asp:TemplateColumn HeaderText="选择">
<ItemTemplate>
<INPUT name="chkItem" type="checkbox" value='<%# DataBinder.Eval(Container, "DataItem.id") %>' class="nonebg">
</ItemTemplate>
</asp:TemplateColumn>
难道这是动态添加的么?代码在我公司电脑里,明天发上来。