.net中,如何获取到gridview控件中的checkbox控件的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net中,如何获取到gridview控件中的checkbox控件的值?相关的知识,希望对你有一定的参考价值。

如果不放在gridview控件中checkbox的值很用checkbox1.text容易获得,同时查看被编译后的checkbox控件的id是checkbox1;但是发现放在gridview控件中的checkbox的值用checkbox1.text获不到,而且提示checkbox1未定义,同时查看被编译后的checkbox控件的id不是checkbox1,而是很长一串其它的字符。
我是手动设置gridview的,然后在相应的itemtemplate模板中加的checkbox服务器控件。
使用gridview1.FindControl("checkbox1")不行呀,回为一旦设置后,里面有诸多checkbox的,如何定位在相要的checkbox?

参考技术A CheckBox chk =(CheckBox )GridView1 .Rows [i].Cells [j].FindControl ("CheckBox1");
//i为GridView1 的第i行,j为GridView1的第j列

if (chk.Checked)

....//如果模板列上的checkbox1被选中,则...
本回答被提问者采纳
参考技术B 你的checkbox用的是服务器控件吧
所以编译后会出现很长一串其它的字符

gridview的datakeys绑定的是表的主键列
所以获取选中checkbox的值为
string a=GridView1.DataKeys[e.RowIndex].Value.ToString();

我的答案不用,不是说了吗,在gridview的属性里找到datakeys绑定表里的主键列,
然后用string a=GridView1.DataKeys[e.RowIndex].Value.ToString();获取你 选中行的checkbox的值
参考技术C 你可以利用FindControl方法,gridview.FindControl("checkbox1"); 参考技术D foreach (Control cr in GridView1.Rows)

(CheckBox)cr.FindControl (checkboxid)

大致这样了 你试试 实际开发中不可能用GridView滴 也就忘记了

使用js获取checkbox控件在GridView中的第几行

这次的知识点是如何使用js获取checkbox控件所在的是第几行!!!

我们可以使用 JavaScript 中自带的 rowIndex 和 cellIndex 来获取行和列的键值 (从0开始)

这两个一定要记好:

var row_num = GV.rows[i].cells[0].children(0).parentNode.parentNode.rowIndex;

var col_num = target.parentNode.cellIndex;

获取 parentNode (也就是 td),td.cellIndex 就是所在列的键值

获取 parentNode.parentNode (也就是 tr),tr.rowIndex 就是所在行的键值

在开发过程中,GridView绑定数据时需要在第一列绑定checkbox控件用来执行多选等复杂操作,然后可以在前台页面通过手动点击checkbox来使其checked属性变成true也就是选中状态,在后台循环时可以轻松获取到checkbox的checked值,但是由于一些业务需求可能不需要使用手动去点击,而是通过编写出js方法,若符合方法结果的则循环修改checkbox的checked属性变成true也就是选中状态,这时会发现在后台是获取不到checkbox的checked值。

在我遇到这个问题时也让我困扰了好久,明明在前台通过js方法已经将某些checkbox控件的checked值设置为true了,为什么在后台就是获取不到呢?

好了,我来说一下最后我是怎么解决的:

首先这个问题是在前台js中可以获取到checkbox的checked的值,但是在后台循环时获取不到。

先设置一个隐藏控件:

<input type="hidden" id="row_num" runat="server" />

在前台先通过循环判断被选中的checkbox

if (GV.rows[i].cells[0].children(0).checked) {
                        var row_num = GV.rows[i].cells[0].children(0).parentNode.parentNode.rowIndex;
                        document.getElementById("row_num").value = row_num;
                    }

然后通过 var row_num = GV.rows[i].cells[0].children(0).parentNode.parentNode.rowIndex;来获取到在GridView中第几行的CheckBoex的行数,然后赋值到一个隐藏控件上去,这样在后台就可以获取到这个隐藏控件上面的值了,然后通过在Rows[]里面将取得的数减1就是在前台被选中的checkbox的行数,最后将它设置为True就OK了。

 

if (this.row_num.Value != "") {
            int j = Convert.ToInt32(this.row_num.Value);
            (this.GridView1.Rows[j - 1].Cells[0].FindControl("CKB_data") as CheckBox).Checked = true;
            this.row_num.Value = "";
        } 

 

以上是关于.net中,如何获取到gridview控件中的checkbox控件的值?的主要内容,如果未能解决你的问题,请参考以下文章

.net高手:我想在gridview加入一列图片

从 ASP.NET GridView 更新中获取 textarea 中的文本

asp.net 2.0中GridView控件的怪怪问题

在 asp.net 中处理 Gridview 控件中的文本框?

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作

ASP.NET 中GridView 控件的DataFormatString属性的用法