vs2005里面,如何得到行中模板列中的控件,;)有代码;在线等,
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox Cb = (CheckBox)this.GridView1.Rows[i].Cells[2].FindControl( "CheckBox1 ");
}
在模板列中有CheckBox1控件,按照vs2003的做法,获取不到,看htm代码时:显示的是
<input id= "GridView1_ctl03_CheckBox1 " type= "checkbox " name= "GridView1$ctl03$CheckBox1 " />
这样就找不到名为:CheckBox1控件了。
怎样才能得到模板列中控件。
[解决办法]
foreach (GridViewRow row in GVMain.Rows)
{
CheckBox cbCheck = (CheckBox)row.Cells[5].FindControl( "cbCheck ");
}
[解决办法]
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox Cb = (CheckBox)this.GridView1.Rows[i].FindControl( "CheckBox1 ");
}
[解决办法]
private void GetSelectRows(string status)
{
string numberID = " ";
string NumberIDList = " ";
for (int i = 0; i < gvInfo.Rows.Count; i++)
{
GridViewRow row = gvInfo.Rows[i];
bool isChecked = ((CheckBox)row.FindControl( "chkSelect ")).Checked;
if (isChecked)
{
numberID = gvInfo.Rows[i].Cells[1].Text;
NumberIDList += numberID + "| ";
}
}
if (NumberIDList + " " == " ")
{
JScript.Alert( "请至少选择一行记录! ");
return;
}
NumberIDList = NumberIDList.Remove(NumberIDList.Length - 1);
try
{
SaleEvent_Rule.ManagementAudingInformed(Staff_ID, NumberIDList, status+ " ");
JScript.Alert( "提交成功! ");
ShowToScreen();
}
catch (Exception ex)
{
HGERROR.log(ex.ToString());
JScript.Alert( "提交出现错误! ");
}
}
[解决办法]
(CheckBox)GridView1..Rows[i].Cells[2].Controls[1]
[解决办法]
学习
[解决办法]
去掉Cells[2]试试
[解决办法]
CheckBox Cb = (CheckBox)this.GridView1.Rows[i].FindControl( "CheckBox1 ");
这里边的“CheckBox1”是服务器控件(实例)的id而不是客户端id(ClientID),不要照抄客户端源代码中的ID。
如果取不到,那也应该从服务器端的控件原理去找原因,例如你应该调试中断并查看当时的GridView1.Rows[i].Controls以及内部的对象(通过调试监视窗口或者命令窗口等可以输出运行状态的地方),看看是不是应该判断
if(this.GridView1.Rows[i].RowState==Edit)
等。
总之要学原理,FindControl等方法需要的ID参数不要望文生义以为是客户端ID。