DataGrid的TemplateColumn里有一个CheckBox,我的问题是CheckBox似乎不能激发OnItemCommand事件,那么我怎么可以在CheckBox的Checked属性发生改变的时,知道发生变化的这个CheckBox时DataGrid中的哪一行的呢?也就是说,我要从CheckBox出发,找出它位于DataGrid中的那一行?希望高手帮帮忙,在线等!!谢谢!!
解决方案 »
- 关于C#中的WindowsApplication能不能直接导出数据库,使得在不同的计算机上都不用安装SQL也可以直接进行运行
- 给exe文件添加参数,在窗体构造函数中设置控件属性导致程序不运行的问题导致程序
- 有没有类似于PPT里的编辑控件啊,像Edit一样,你点中它,周边就有一个框框起来,可以在里面编辑,可拖动(不能拖动的也行),背景透明的。
- 用VS2005创建的窗体和控件,看不到代码
- 请问 Provider=OraOLEDB.Oracle Provider=MSDAORA
- 各位你们下载的“Coffice协同办公管理系统"可以运行吗?
- 求高手帮我解决一下TIMER类的问题
- 如何把listbox选中的值 存到列表中?
- 存储过程数据处理的问题
- 请问怎样同时实现查找和替换
- (纯技术贴)请问一下sqldmo里备份和还原的问题
- 关于SOCKET多线程接受的一个奇怪的现象
/// 此方法适合绑定列,不适合数据表主键绑定了Label的情况.
/// </summary>
/// <param name="grid"></param>
/// <param name="controlID">checkBox控件ID</param>
/// <param name="primaryKeyIndex">要获取数据表中列的索引</param>
/// <returns></returns>
public static ArrayList GetSelected(GridView grid, string controlID, int primaryKeyIndex)
{
ArrayList aryChecked = new ArrayList();
for (int i = 0; i < grid.Rows.Count; i++)
{
CheckBox chk = (CheckBox)grid.Rows[i].FindControl(controlID);
if (chk.Checked)
aryChecked.Add(grid.Rows[i].Cells[primaryKeyIndex].Text.ToString());
}
return aryChecked;
} /// <summary>
///
/// </summary>
/// <param name="grid"></param>
/// <param name="checkBoxControlID"></param>
/// <param name="primaryKeyControlID"></param>
/// <returns></returns>
public static ArrayList GetSelected(GridView grid, string checkBoxControlID, string primaryKeyControlID)
{
Label lbl_id = null;
//
ArrayList aryChecked = new ArrayList();
for (int i = 0; i < grid.Rows.Count; i++)
{
CheckBox chk = (CheckBox)grid.Rows[i].FindControl(checkBoxControlID);
if (chk.Checked)
{
if (grid.Rows[i].FindControl(primaryKeyControlID) is Label)
{
lbl_id = (Label)grid.Rows[i].FindControl(primaryKeyControlID);
aryChecked.Add(lbl_id.Text.Trim());
}
}
}
return aryChecked;
}
<ItemStyle HorizontalAlign="center" />
<HeaderTemplate>
<input type="checkbox" id="chk_All" onclick="checkAll()" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chk_selected" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="False">
<ItemTemplate>
<asp:Label ID="lbl_TeachCatalogID" Text='<%# Convert.ToInt32(DataBinder.Eval(Container.DataItem,"teachCatalogID")) %>'
runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
后台:ArrayList selectRows = GetGridCheckColumn.GetSelected(grid_Course, "chk_selected", "lbl_TeachCatalogID");
事件中写,应该就可以了,我也可以采用为CheckBox手工添加事件的方法
{
CheckBox chk;
foreach (DataGridItem dgi in DataGrid1.Items)
{
chk = (CheckBox)dgi.FindControl("chkSelect");
if (chk != null)
{
if (chk.Checked)
{
//可以使用DataGrid1.DataKeys[dgi.ItemIndex].ToString()得到当前主键值
}
}
}
}