GridView里模板列的CheckBox问题

vinson985 2009-01-08 01:26:21
GridView有一模板列里全部是CheckBox,CheckBox的AutoPostBack设置为True

当CheckBox的onCheckedChange改变的时候,怎么判断我点击的CheckBox是GridView里的第几行呀??
...全文
334 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
evasunny2013 2009-01-08
  • 打赏
  • 举报
回复
学习下~~~~
善缘2022 2009-01-08
  • 打赏
  • 举报
回复
sp1234说的很详细,学习下。
  • 打赏
  • 举报
回复
此外,假设在同一行的其它模板中另外有两个控件:

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("ab") %>' ForeColor='<%# Eval("cd").ToString().EndsWith("R")?System.Drawing.Color.Red:System.Drawing.Color.Black %>'>
</asp:Label>
<asp:DropDownList runat="server" ID="myList" DataSource='<%# this.GetRandomString((string)Eval("yf")) %>' />
</ItemTemplate>


你也可以直接这样查找:

chk.FindControl("Label1") as Label;
chk.FindControl("myList") as DropdownList;


也就是说,无所谓它们是放在GridView还是别的什么东西里边。如果你写程序一定要绕道GridView再去查找checkbox和label、dropdownlist,就反而找麻烦了。
  • 打赏
  • 举报
回复
其实为checkBox绑定“((GridViewRow)Container).RowIndex”没有多大意义,有意义地是绑定源数据字段。

另外,除非在改变CheckBox的状态时你需要立刻进行后台处理并且修改界面,否则基本上也确实不需要设置AutoPostback为true。在任何回发操作时,所有(多个)被修改了选中状态的CheckBox逐一依次调用CheckedChanged,因此一个也不少地都可以被你的CheckedChanged方法捕获到。而且基本上是先依次触发这些事件,然后才你触发了回发的事件(因为asp.net是触发完所有PostDataChangedEvent()管理的各个事件之后才触发PostBackEvent所代表的那一个事件的)。
  • 打赏
  • 举报
回复
让CheckBox去知道它属于GridView的第几行(不知你没有考虑过分页情况)其实大多数情况下没有什么意义。实际上,知道业务key关键值才是需要的。下面我两个都绑定:

<ItemTemplate>
<asp:CheckBox ID="chk" runat="server" 我绑定啦='<%# Eval("yf") %>' 我绑定呀='<%# ((GridViewRow)Container).RowIndex %>' OnCheckedChanged="chk_CheckedChanged" />
</ItemTemplate>
protected void chk_CheckedChanged(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string a = chk.Attributes["我绑定啦"];
string b = chk.Attributes["我绑定呀"];
//...............
}
mengxj85 2009-01-08
  • 打赏
  • 举报
回复
AutoPostBack设置为True
最好别这样
参考一楼的
Hechunwei211 2009-01-08
  • 打赏
  • 举报
回复
up!
全是套路 2009-01-08
  • 打赏
  • 举报
回复
 protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
{ int i = ((GridViewRow)((CheckBox)sender).NamingContainer).RowIndex;}
che2piaopiao 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiang_jiajia10 的回复:]
C# code
protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
foreach (GridViewRow gr in GridView1.Rows)
{

CheckBox chk = (CheckBox)gr.Cells[4].FindControl("Checksingle");
if (!chk.Checked)
{

chk.Checked = true;
}
else
{

chk.Checked = fal…
[/Quote]

mark
chengdishuai 2009-01-08
  • 打赏
  • 举报
回复
e.row.....
lambober 2009-01-08
  • 打赏
  • 举报
回复
post到服务器后,可以用GridView的当前行,然后再找啊
zlb789 2009-01-08
  • 打赏
  • 举报
回复
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;

建议用js
q413165137 2009-01-08
  • 打赏
  • 举报
回复
5楼行
Hertz_liu 2009-01-08
  • 打赏
  • 举报
回复
是一楼,说错了
Hertz_liu 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wuyq11 的回复:]
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;
}
或通过checkbox添加js事件,判断是那一行
[/Quote]
5楼可行,二楼的方法得不到当前是第几行
rascalwm 2009-01-08
  • 打赏
  • 举报
回复
循环每一行 就OK了 啊 在每一行去判断你的checkbox 没啥难的
xhan2000 2009-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jivi 的回复:]
GridView里的CheckBox你也敢搞成 AutoPostBack. 你强
[/Quote]

一大堆viewstate来回交互,很费性能,换种解决方式
wuyq11 2009-01-08
  • 打赏
  • 举报
回复
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;
}
或通过checkbox添加js事件,判断是那一行
vinson985 2009-01-08
  • 打赏
  • 举报
回复
好像不行啊
vinson985 2009-01-08
  • 打赏
  • 举报
回复
2楼的方法可以~
加载更多回复(2)
一、表头表尾 1、自定义多行表头,合并,行合并 2、删除表身指定、行 3、固定表头,向下拉动滚动条时,表头固定不动 4、表脚行统计,总计、平均值 二、导入导出 1、导出Excel,Word 2、导入Excel 三、多层嵌套 1、在父GridView中的编辑模板中嵌套一个子GridView 2、三层GridView嵌套 四、分页排序 1、分页 2、排序,点击升序、降序排序 五、结合控件 1、CheckBox控件,多选、全选 2、DropDownList控件 3、隐藏控件,当选择处理状态选中备注时,隐藏textbox显示 4、radio控件,选中获取GridView表主键 5、GridView中DropDownList绑定数据,直接绑定显示,无需点击编辑按纽。 6、JavaScript操作checbox实现全选,多选 六、设置属性 1、JavaScript设置GridView行的背景颜色,单偶行的背景颜色,鼠标停留行背景,鼠标选中时的行背景 2、GridView的JavaScript中的行单击,双击、删除提示框、快捷键事件 3、GridView设置属性,单元格文本颜色,单元格背景颜色,表中增加空行 七、无代码 GridView排序、发送邮件、点击行查看详情,内容过长截取 八、选增删改 1、GridView自带的选中、编辑、删除,即CommandField 2、GridView添加记录,在GridView表脚添加控件,用添加记录 3、更新所有记录,GridView直接绑定控件,然后更新 九、主键索引 根据主键多条记录删除,单条记录删除。
1、鼠标经过行时改变行的样式 CssClassMouseOver - 鼠标经过行时行的样式的CSS类名 2、给字段标题加上排序状态 设置其SortTip下的4个属性即可 SortAscImage - 升序提示图片 SortAscText - 升序提示文本 SortDescImage - 降序提示图片 SortDescText - 降序提示文本 3、单击命令按钮弹出确认框 设置其ConfirmButtons属性 CommandName - 命令按钮的CommandName属性 ConfirmMessage - 弹出的确认框所显示的文字 4、每行复选框的全选与取消全选 在模板的头模板处添加一个复选框,在模板的项模板处添加一个复选框,然后设置控件的CheckboxAlls属性 CheckboxAllID - 模板全选复选框ID CheckboxItemID - 模板项复选框ID 5、固定表头、指定行或指定 设置其FixRowCol下的6个属性 IsFixHeader - 固定表头否? IsFixPager - 固定分页行否? FixRowIndices - 需要固定的行的索引(用逗号“,”分隔) FixColumnIndices - 需要固定的的索引(用逗号“,”分隔) TableWidth - 表格的宽度 TableHeight - 表格的高度 EnableScrollState - 是否保持滚动条的状态 6、数据行响应鼠标的单击和双击事件 RowClickButtonID - 行单击事件所对应的按钮的ID RowDoubleClickButtonID - 行双击事件所对应的按钮的ID 7、改变通过CheckBox选中的行的样式 CheckBoxID - 模板的项复选框的ID CssClassRowSelected - 选中行的样式的CSS类名 8、导出为Excel 在GridView内加一个按钮 CommandName属性设置为“ExportToExcel” CommandArgument属性的值用“;”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的的索引(索引用“,”分开) 9、给数据行增加右键菜单 ItemType - 右键菜单的项的类别(Link,Command,Custom,Separator) Icon - 文字左边的图标的链接 Text - 菜单的文字 CommandButtonId - 所调用的命令按钮的ID NavigateUrl - 链接的url Target - 链接的target(Blank,Self,Top) Key - 自定义属性key Value - 自定义属性value 10、扩展分页功能 设置PagingStyle属性为Default

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧