请问:如何获取DataGrid控件的页脚中的服务器端控件对象?

hchxxzx 2005-03-07 10:51:07
我用后台代码在DataGrid控件的页脚列里,加入了一个CheckBox服务端对象,但提交的时候,我用如下语句求取,出错,提示"未将对象引用设置到对象的实例"
CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
this.Label1.Text = bolEdit.Checked.ToString();

请问该如何求取?
...全文
195 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
noyester 2005-03-08
  • 打赏
  • 举报
回复
Dim item As DataGridItem

For Each item In Me.DataGrid1.Controls(0).Controls

If item.ItemType = ListItemType.Footer Then
Dim ddl As Label = CType(item.FindControl("label2"), Label)

Me.Response.Write(ddl.Text)
End If
Next

这个试
noyester 2005-03-08
  • 打赏
  • 举报
回复
Private Sub DataGrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemCreated
If e.Item.ItemType = ListItemType.Footer Then
Dim lbl As Label = CType(e.Item.FindControl("Label2"), Label)
lbl.Text = Now
End If
End Sub
hunter_32 2005-03-08
  • 打赏
  • 举报
回复
foreach(Control c in DataGrid1)
{
if(C.ID = "你控件的ID")
{
}
}
hchxxzx 2005-03-08
  • 打赏
  • 举报
回复
顶顶
hchxxzx 2005-03-08
  • 打赏
  • 举报
回复
另外,如下方式

遍历datagriditem:
foreach (DataGridItem e in datagrid1.Items)
{
if(e.Item.ItemType==ListItemType.Foot)
{
CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
string result = bolEdit.Value;//?
}
}


求取的行控件,总数只有6个,可能是少了页眉与页脚.所以无法正确求取到值
hchxxzx 2005-03-08
  • 打赏
  • 举报
回复
to noyester(继续是菜鸟)
你的最后一个方法思路是对的(但所有其他方法都是错的).我受到你的启发,写如下程序正确求取出值.


int mycount = this.DataGrid1.Controls[0].Controls.Count;
for(int i=0;i<mycount;i++)
{
DataGridItem myitem = (DataGridItem)this.DataGrid1.Controls[0].Controls[i];
TextBox mybox = new TextBox();
mybox = (TextBox)myitem.FindControl("TextBox1");
if(mybox != null)
{
this.MyScript(i.ToString() + "=" + mybox.Text + " 总行数:" + mycount.ToString());
}
}


以上原理,推测应是如下:
datagrid控件在生成之后,作为父控件,在其下拥有直属的一个子控件,而在此子控件之下,又拥有8个孙控件,此8个孙控件,包括通常的页眉/普通项/交替项/页脚等.求取页脚内的控件,自然是最后一个孙控件,所以求取的方法可简要归纳为如下:

int mycount = this.DataGrid1.Controls[0].Controls.Count;
TextBox mybox = (TextBox)this.DataGrid1.Controls[0].Controls[mycount-1].FindControl("TextBox1");
this.MyScript(mybox.Text);


谢谢.
此贴暂放几天,以供各位同仁参考.几天后结贴.主要得分应是 noyester(继续是菜鸟)
bgu 2005-03-07
  • 打赏
  • 举报
回复
在DataGrid的DataBound裡加入:
if(e.Item.ItemType==ListItemType.Foot)
{
CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
this.Label1.Text = bolEdit.Checked.ToString();
}
shanjinqi 2005-03-07
  • 打赏
  • 举报
回复
up
haoco 2005-03-07
  • 打赏
  • 举报
回复
up
amendajing 2005-03-07
  • 打赏
  • 举报
回复
e.Item.ItemType==ListItemType.Foot
anycall2004 2005-03-07
  • 打赏
  • 举报
回复
if(e.Item.ItemType==ListItemType.Foot)
hiroki513 2005-03-07
  • 打赏
  • 举报
回复
是不是你加CheckBox服务器对象时没有给它加Runat=server这个属性?
hchxxzx 2005-03-07
  • 打赏
  • 举报
回复
这个跟加断点没有关系.总的来说,就是无法从服务端取得DATAGRID页眉部分控件的值.
各种方法都试过了,当然,在ItemDataBound事件里面是可以得到,但要对控件做操作的时候,往往是在某个提交按钮事件里面,恰恰是在这里卡壳了.
请各位一起探讨吧
wbj02 2005-03-07
  • 打赏
  • 举报
回复
加断点调试一下应该就知道哪里不行了。
hchxxzx 2005-03-07
  • 打赏
  • 举报
回复
to AllenTing(It's time to 闭关修炼ing!!)

这个方法也不行,也只能求取到普通项及交替项.
AllenTing 2005-03-07
  • 打赏
  • 举报
回复
我已经成功加入该服务器端控件了,现在的问题是在页面提交的时候,要取该控件的值啊.可你们都在回答如何放入该控件.
比如说在页面放一个提交按钮,之后在该提交按钮的事件里,求取上述控件的值.
---------------------------------------
遍历datagriditem:
foreach (DataGridItem e in datagrid1.Items)
{
if(e.Item.ItemType==ListItemType.Foot)
{
CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
string result = bolEdit.Value;//?
}
}
hchxxzx 2005-03-07
  • 打赏
  • 举报
回复
to fancyboyxh(ffffbbbbyyy)
你的方法不能用。
以这种方式,只能求取到DATAGRID所生成的普通项及交替项,无法求取页眉及页脚
warren1999 2005-03-07
  • 打赏
  • 举报
回复
加断点查看
fenglik 2005-03-07
  • 打赏
  • 举报
回复
你可以用变量代替label实现同样的效果
fancyboyxh 2005-03-07
  • 打赏
  • 举报
回复
for(int i=0;i<DataGridName.Items.Count;i++)
{
CheckBox CheckBoxSelect=(CheckBox)DataGridName.Item[i].FindContrl("CheckBoxName");
if(CheckBoxSelect.Checked)//选取选中的checkbox
{
...
}
...
}
加载更多回复(2)

62,047

社区成员

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

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

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

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