难道没人会解决???再次发贴!急请 &&版主&& 和 ###高手###兄弟!帮解决或一起探讨获取datagrid绑定的字段名问题,困惑很久,自认为比较棘手的

hlandxm 2006-10-29 11:08:14
请问知道一个DataGrid的一个字段名(Age),请问怎么得到该字段列每行的值?
已知的信息是:知道datagrid的ID和其中一个列的字段,
我的思路是:

1 .因为datagrid不支持rows属性,所以想给该Datagrid转换成DataTable来解决,可是给datagrid转换成DataTable时获取不到该datagrid的数据源(DataSource),然后就放弃转换成DataTable的思路)
2 .因为datagrid不支持datagrid.items[行号].cell[列名],这样就取不到该列每行的值,因为支持Datagrid.items[行号].cell[列号],可是现在却不知道Age字段是第几列,所以我就转换成下面的方法:

3.取出该Datagrid所有的字段集合,然后循环比较,看第几列是Age字段,可现在取列的集合,一直取不到的
.......这个问题我想了很多办法,最后还是没解决

现在急请各位高手兄弟帮解决,有思路可一起探讨,定重谢!

如果不能知道正确的解决方法,请不要回复和顶该贴,请谅解,谢谢!!!!
这问题没有正确解决前我会一直顶的,所以就不需要请不能解决问题的兄弟帮顶,呵

如果还没明白我的需求的话,请看贴子:
http://community.csdn.net/Expert/topic/5115/5115121.xml?temp=.1429102

这里有我详细的描述及孟子E章的回复 谢谢!!!!
...全文
409 24 打赏 收藏 举报
写回复
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxshzf 2006-11-22
  • 打赏
  • 举报
回复
又学到一招
mss 2006-11-19
  • 打赏
  • 举报
回复
datagrid1.items[x] 其实就是你放进去的object 类型
bluemoon0001 2006-10-30
  • 打赏
  • 举报
回复
不好意思,上面写错一点,把我的列名写进去了,改正如下:

不知道,你的DataGrid和你的自定义控件是不是放在同一个网页上的,如果是的话,用下面的方法一试,应该可以的:

你邦定datagrid的时候用模板列邦定,例:

<asp:datagrid id="MyDataGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn SortExpression="age" HeaderText="年龄">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "age") %>' ID="age"/> </ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>

在你的定义控件中用下面方法找到你的datagrid及得到datagrid中每行的年龄:

DataGrid MyDataGrid = (DataGrid)this.Page.FindControl("MyDataGrid");
for(int i=0;i<MyDataGrid.Items.Count;i++)
{

Response.Write("这是你要的年龄" + i + ":" + ((Label)this.MyDataGrid.Items[i].FindControl("age")).Text + "<br>");
}

bluemoon0001 2006-10-30
  • 打赏
  • 举报
回复
不知道,你的DataGrid和你的自定义控件是不是放在同一个网页上的,如果是的话,用下面的方法一试,应该可以的:

你邦定datagrid的时候用模板列邦定,例:

<asp:datagrid id="MyDataGrid" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateColumn SortExpression="age" HeaderText="年龄">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "au_lname") %>' ID="age"/> </ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>

在你的定义控件中用下面方法找到你的datagrid及得到datagrid中每行的年龄:

DataGrid MyDataGrid = (DataGrid)this.Page.FindControl("MyDataGrid");
for(int i=0;i<MyDataGrid.Items.Count;i++)
{

Response.Write("这是你要的年龄" + i + ":" + ((Label)this.MyDataGrid.Items[i].FindControl("age")).Text + "<br>");
}

luanwey 2006-10-30
  • 打赏
  • 举报
回复
hdt(倦怠) ( ) 信誉:120 Blog
这个可行。。。
woaihanlu 2006-10-30
  • 打赏
  • 举报
回复
后期绑定不行吗?

<%# ToXXobj(DataBinder.Eval(Container.DataItem, "age")) %>



protected string toXXobj(object o)
{
switch(o.gettype())
{
case String.gettype():
xxxx;
break;
case int.gettype();
xxxx;
break;
}
}



sunjay117 2006-10-30
  • 打赏
  • 举报
回复
datagrid1.items[x] 其实就是你放进去的object 类型
真相重于对错 2006-10-30
  • 打赏
  • 举报
回复
foreach( DataGridItem item in datagrid1.Items )
{
if ( Item.ItemType == ListItemType.Item ||
Item.ItemType == ListItemType.AlternatingItem ||
Item.ItemType == ListItemType.SelectedItem ||
Item.ItemType == ListItemType.EditItem)
{
DataRowView drv = (DataRowView)item.DataItem;
object value = drv["age"];
}

}
hlandxm 2006-10-30
  • 打赏
  • 举报
回复
???????????
楼上兄弟,是在同一个页面上,但datagrid是怎么绑定数据是不知道的,而且绑定数据是多种多样的,绑定列占多数呢,不可能都是模板列呢,这绑定都是别人绑定的,所以具体怎么绑定的就不知道,只知道具体datagrid的ID及要统计哪些字段

现在如果能给dataGrid的数据源能取到的话,也能实现我的问题,datagrid应该有数据源啊,不然就不可能显示有数据,可现在怎么获取不到datasource呢,难道没找对方法吗?
我取数据源的方法是:
object dataGridSource = ((DataGrid)datagridIDName).DataSource;
lannicks 2006-10-30
  • 打赏
  • 举报
回复
由于DataGrid的填充方式是未知的,你不能按模板列或者绑定列去处理。并且ASP.net每次进行页面刷新时,都是先把这个页面unload,然后再重新load,对应所有的控件都会先销毁再重新创建,这种情况下使用FindControl是没有办法获得你要控件的值的。所以你要使用FindControl的方法去获取DataGrid的datasource是不行的。好像用request去请求获得对应控件的值,你可以试试!
有段时间没搞bs了,希望没有误导。如果不行,可以找点ASP.net的Web页面生命周期的资料了解下,看是如何获取这个datasource值的。
hlandxm 2006-10-30
  • 打赏
  • 举报
回复
?????
这个就不知道了,因为是别人绑定的,我只知道datagrid的ID及要统计的字段
真相重于对错 2006-10-30
  • 打赏
  • 举报
回复
数据源是什么??
DataTable or DataReader
yangye1211 2006-10-30
  • 打赏
  • 举报
回复
DataRowView drv = (DataRowView)item.DataItem;
^^^^^^^^^^^
这里没看懂
hlandxm 2006-10-30
  • 打赏
  • 举报
回复
Control c = this.FindControl(DatagridIdName);
if(c != null)
{
DataGrid dgrid=new DataGrid();
dgrid=(DataGrid)this.FindControl(DatagridIdName);
foreach( DataGridItem item in dgrid.Items)
{
if ( item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem ||
item.ItemType == ListItemType.SelectedItem || item.ItemType == ListItemType.EditItem)
{ DataRowView drv = (DataRowView)item.DataItem; object value = drv["age"];
}

}
}
真相重于对错 2006-10-30
  • 打赏
  • 举报
回复
贴出你的代码??
hlandxm 2006-10-30
  • 打赏
  • 举报
回复
????????????????
hdt(倦怠) 您好,谢谢你的解答

我完整的按照你的执行了,执行到drv时就报错了,drv没获取到值呢,提示是:未将对象引用设置到对象的实例
跟踪看了下,是因为drv显示没定义的值,没获取到值,我实际的表格是有值的啊
真相重于对错 2006-10-30
  • 打赏
  • 举报
回复
行不通啊,朋友们,监视运行后提示:drv 未定义的值
==============================
所以最好在foreach里写 ,再加上对item的类型判断,以避免渠道页眉,即页脚

foreach( DataGridItem item in datagrid1.Items )
{
if ( item.ItemType == ListItemType.Item || //上一次随手写的没注意大小写
item.ItemType == ListItemType.AlternatingItem ||
item.ItemType == ListItemType.SelectedItem ||
item.ItemType == ListItemType.EditItem)
{
DataRowView drv = (DataRowView)item.DataItem;
object value = drv["age"];
}

}
hlandxm 2006-10-30
  • 打赏
  • 举报
回复
???????????????

DataRowView drv = (DataRowView)item.DataItem;
object value = drv["age"];

行不通啊,朋友们,监视运行后提示:drv 未定义的值
ynx2000 2006-10-30
  • 打赏
  • 举报
回复
请问一下,你绑定的时候是不是取不到数据,还是数据不能绑定到上面去呀
asdex1999 2006-10-30
  • 打赏
  • 举报
回复
http://www.quandi.cn/WebForm1.aspx?quandi_id=asdex1999
加载更多回复(4)
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-10-29 11:08
社区公告

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

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