日期:2014-05-18  浏览次数:20454 次

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。