众所周知,在.NET开发中如果把代码都写在后台,每块进行操作的功能代码都会使页面进行刷新,所以为避免不必要的页面刷新,就需要使用JS来进行操作。比如说为GridView的每一行添加一个CheckBox,在外面放置一个按钮,通过选择GridView中的CheckBox,来获取选中行的数据,如果拖的是Server端的按钮,那么自然会引起页面的刷新,而现在只是需要取的是GridView中的数据,没有必要再与服务端打交道,所以就只有拖HTML的按钮了,然后使用JS对GridView进行操作。
先贴两张图上来看看:第一张便是JS实现的操作,第二张是后台代码实现的操作。
我在GridView中分别放了一般的HTML和runat="server"的CheckBox控件,然后在下面又分别放了一般的HTML和runat="server"的Button控件,用以区分。
下面是怎样操作GridView的JS代码:
<script language="javascript"> function MsgSelect() { var strmsg = ""; var count = 0; //用来判断当前选择了几行
//用JavaScript DOM的document.all可以获取到页面上所有元素,继而去获取到GridView1 for (var i = 1; i < document.all.GridView1.rows.length; i++) { //条件是从该GridView得第2行开始,小于它的行的总数,因为该GridView控件有表头一行 if (document.all.GridView1.rows[i].cells[4].children(0).checked) { //获取到GridView1第i行5列的checkbox控件,判断它的checked属性 count++; if (count == 1) //如果当前选择了1行,则只取得该行中需要显示的数据 strmsg += "“" +document.all.GridView1.rows[i].cells[1].innerText+ "”";//得到i行2列的值 if (count > 1 && count < document.all.GridView1.rows.length) //如果选择了1行以上,则在后一行的前面加上一个“和”字 strmsg += "和“" + document.all.GridView1.rows[i].cells[1].innerText + "”"; } } if (strmsg == "") //判断strmsg发生变化没有,也就是说有没有进行选择 document.all.Label9.innerText = "你什么都没有选择!";
//还是用document.all找到页面上的标签,然后用innerText属性修改它的文本 else document.all.Label9.innerText = "你选择了" + strmsg; }
</script>
下面是Server端Button的单击事件代码:
protected void Button2_Click(object sender, EventArgs e) { String strmsg = ""; int count = 0; CheckBox ckbox; for (int i=0;i<GridView1.Rows.Count;i++) { ckbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox3"); //找到checkbox控件 if (ckbox.Checked) { count++; if(count==1) strmsg += "“"+GridView1.Rows[i].Cells[1].Text.ToString().Trim()+"”"; if(count>1 && count<GridView1.Rows.Count) strmsg += "和“" + GridView1.Rows[i].Cells[1].Text.ToString().Trim() + "”"; } } if (strmsg == "") Label9.Text = "你什么都没有选择!"; else Label9.Text = "你选择了"+strmsg; }