GridView 的 FindControl方法

cq_lch1978 2009-07-04 10:11:45
我把Gridview控件封装到一个Web用户自定义控件中,GridView中有一列CheckBox,但是用FindControl方法却不能访问,求助!

private List<string> GetIds()
{
List<string> ids = new List<string>();
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
CheckBox chkChoose = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");

if (chkChoose.Checked)
{
ids.Add(GridView1.DataKeys[i].Value.ToString());
}
}
return ids;
}


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" GridLines="None" BorderWidth="1px"
onrowdatabound="GridView1_RowDataBound" OnRowCreated="GridView1_RowCreated" >
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<Columns>
<asp:TemplateField HeaderText ="选择">
<HeaderTemplate>
<asp:CheckBox ID="chkAll" name="chkAll" runat="server" />
</HeaderTemplate>

<ItemTemplate >

<asp:CheckBox ID="CheckBox1" name="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#2461BF" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
...全文
1209 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
mails2008 2010-12-21
  • 打赏
  • 举报
回复
看不懂啊,但是我的能用啊
[Quote=引用 22 楼 wuyq11 的回复:]

<asp:TemplateField HeaderText="&lt;input type=checkbox name='selectall' onClick='SelectAll(document.form1)'&gt;全选">
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" Width="8%"></Header……
[/Quote]
孤影No1 2010-10-27
  • 打赏
  • 举报
回复
我也遇到这种情况!
当数据源为用dateset什么问题都没有。
但一旦数据源改为SqlDataSource,找到的控件值就为空。
如果不用SqlDataSource数据源,就不能做排序功能,郁闷啊!
那位高手帮忙解答一下。

cq_lch1978 2009-07-04
  • 打赏
  • 举报
回复
FindControl找不到控件,能不能用其他方法找控件呢。
meditatorx 2009-07-04
  • 打赏
  • 举报
回复
不要用FindControl方法
我姓区不姓区 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cq_lch1978 的回复:]
真心感谢您的帮助,用JavaScript有一个小问题,我知道那个CheckBox被选中了,但是我不知道选中的CheckBox在GridView里是哪一行的CheckBox。这个可以解决吗。
[/Quote]

我10楼的方法不行?
cq_lch1978 2009-07-04
  • 打赏
  • 举报
回复
真心感谢您的帮助,用JavaScript有一个小问题,我知道那个CheckBox被选中了,但是我不知道选中的CheckBox在GridView里是哪一行的CheckBox。这个可以解决吗。
jasondct 2009-07-04
  • 打赏
  • 举报
回复
奇怪了。 我怎么也看不出问题。
用这个试试 能不能找到你的那个checkbox控件
function SelectAll(tableId ,checkbox)
{
var table = document.getElementById(tableId);
var CBList = table.getElementsByTagName("input");
}

------------------
用这个调用
onclick ="SelectAll('GridView1',this)"
jasondct 2009-07-04
  • 打赏
  • 举报
回复
好的 有问题 就好 。 我看看
cq_lch1978 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jasondct 的回复:]
foreach (GridViewRow Gvr in GridView1.Rows)
        {
            CheckBox Cbx = (CheckBox)Gvr.FindControl("mycheck");
            if (Cbx.Checked)
            {
                string delid = Gvr.Cells[1].Text;
                MyID += " or Pid ='" + delid + "'";
                i++;
            }
        }
试试行不行 不行 给我信息。 GridViewRow 就是控件的 行
[/Quote]
Cbx 还是 null,我用监视看了的,Gvr.Controls[1].ID = "ctl00";找不到 “CheckBox1”
chen_ya_ping 2009-07-04
  • 打赏
  • 举报
回复
这种要找控件的,楼主你可以先看一下页面运行的源代码文件,然后按照ID一步一步的去找。就可以找到了。
jasondct 2009-07-04
  • 打赏
  • 举报
回复
帮你解决问题 就好。 别忘了给分
zdl110110 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jasondct 的回复:]
foreach (GridViewRow Gvr in GridView1.Rows)
        {
            CheckBox Cbx = (CheckBox)Gvr.FindControl("mycheck");
            if (Cbx.Checked)
            {
                string delid = Gvr.Cells[1].Text;
                MyID += " or Pid ='" + delid + "'";
                i++;
            }
        }
试试行不行 不行 给我信息。 GridViewRow 就是控件的 行
[/Quote]
这个正确
我姓区不姓区 2009-07-04
  • 打赏
  • 举报
回复
你加上这两句试试:
private List <string> GetIds()
{
List <string> ids = new List <string>();
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
if(GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{

CheckBox chkChoose = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");

if (chkChoose.Checked)
{
ids.Add(GridView1.DataKeys[i].Value.ToString());
}
}
}
return ids;
}
jasondct 2009-07-04
  • 打赏
  • 举报
回复
foreach (GridViewRow Gvr in GridView1.Rows)
{
CheckBox Cbx = (CheckBox)Gvr.FindControl("mycheck");
if (Cbx.Checked)
{
string delid = Gvr.Cells[1].Text;
MyID += " or Pid ='" + delid + "'";
i++;
}
}
试试行不行 不行 给我信息。 GridViewRow 就是控件的 行
cq_lch1978 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ojlovecd 的回复:]
看代码是没错的,你运行的时候出什么错?chkChoose 为空?
[/Quote]
是chkChoose = null,是不是因为被封装控件的原因?
linbiao523 2009-07-04
  • 打赏
  • 举报
回复
foreach (GridViewRow GVR in GridView1.Rows)
{
CheckBox ck = (CheckBox)GVR.Cells[0].FindControl("CheckBox1");
if (ck.Checked)//被选中
{}
}

这个也太简单了吧
我姓区不姓区 2009-07-04
  • 打赏
  • 举报
回复
看代码是没错的,你运行的时候出什么错?chkChoose 为空?
xml120 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xml120 的回复:]
C# codefor (int i=0; i<= GridView1.Columns.Count-1; i++)
{
CheckBox chkChoose= (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");if (chkChoose.Checked)
¡­
[/Quote]

打错诶。要在指定单元格里找控件吧。
cq_lch1978 2009-07-04
  • 打赏
  • 举报
回复
Columns[i]无FindControl方法
xml120 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkun_3yue3 的回复:]
Rows -> Columns
C# codefor (int i=0; i<= GridView1.Columns.Count-1; i++)
{
CheckBox chkChoose= (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");if (chkChoose.Checked)
{
ids.Add(GridView1.DataKeys[i].Value.ToString());
}
}
[/Quote]
加载更多回复(3)

62,046

社区成员

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

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

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

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