GridView后台取值如何处理,多谢。

juxianxiang 2010-09-15 11:30:50
用的自定义模版,
<asp:id="gridview1" runat="server" >
<colum>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("Name") %>
</ItemTemplate>
</asp:TemplateField>
</colum>
</asp>
后台如何取到这里面的Eval(“name”)值
用for循环这样:
for(int i=0;i《GridView1.rows.count;i++)

string strName=GridView1.rows【i】.cells[0].text.tostring();好像不行
string strName=((textbox)(GridView1.rows【i】.cells[0].text.tostring()))。text。ToString();也不行。



赐教。
...全文
341 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2010-09-15
  • 打赏
  • 举报
回复
放Label不如放Literal,Label会产生垃圾代码span
wuyq11 2010-09-15
  • 打赏
  • 举报
回复
Cell返回的控件强制转换为System.Web.UI.DataBoundLiteralControl类型,然后获取其Text属性
((System.Web.UI.DataBoundLiteralControl)gv.Rows[i].Cells[2].Controls[0]).Text.Trim());
Adechen 2010-09-15
  • 打赏
  • 举报
回复
楼上的正解,参考下
zhaoyajie1984 2010-09-15
  • 打赏
  • 举报
回复
还是放Label吧,众望所归。
孟子E章 2010-09-15
  • 打赏
  • 举报
回复
完整的测试代码
<%@ Page Language="C#" EnableViewState="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected System.Data.DataTable CreateMengxianhuiDataSource()
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("id", typeof(System.Int32)));
dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("Count", typeof(System.Double)));
dt.Columns.Add(new System.Data.DataColumn("CreateDate", typeof(System.DateTime)));

System.Random rd = new System.Random();
for (int i = 0; i < 10; i++)
{
dr = dt.NewRow();
dr[0] = i + i;
dr[1] = "【孟子E章】" + i.ToString();
dr[2] = System.Math.Ceiling(rd.NextDouble() * 1000);
dr[3] = DateTime.Now.AddDays(rd.Next(100) - rd.Next(100));
dt.Rows.Add(dr);
}
return dt;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GridView1.DataSource = CreateMengxianhuiDataSource();
GridView1.DataBind();
}
}

protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < GridView1.Rows.Count; i++)
{
DataBoundLiteralControl strName = GridView1.Rows[i].Cells[0].Controls[0] as DataBoundLiteralControl;
Response.Write("<li>" + strName.Text);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("Name") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="得到值u" />
</form>
</body>
</html>
孟子E章 2010-09-15
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < GridView1.Rows.Count; i++)
{
DataBoundLiteralControl strName = GridView1.Rows[i].Cells[0].Controls[0] as DataBoundLiteralControl;
Response.Write("<li>" + strName.Text);
}
}
begintransaction 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 happying_e 的回复:]
这个gridview既然你给了值,当然可以直接在后台取值啊。



如果有多行,你在gridview里在加一个模板列,放一个按钮,按钮有这样一个属性:commandArgurment='<%#Eval("Name") %>
'

点击按钮后在后台
button btn=(button)sender;
btn.commandArgurment这样也可以去到。



如果你要……
[/Quote]
+1
zhangchao98752 2010-09-15
  • 打赏
  • 举报
回复
gridview里面的每一个部分都对应模板里面的东西!有时根据需要我们可以自己更改模板的显示风格!但不管你换成什么!你都可以通过gridview1.FindControl("")来找到它!找到之后就想控件本身取值一样了
jianshao810 2010-09-15
  • 打赏
  • 举报
回复
你直接在后台用gridview1.FindControl("") as Lable 但是你要把<%#Eval("Name") %>绑定在lable中才可以获得
wwfgu00ing 2010-09-15
  • 打赏
  • 举报
回复
label就可以实现,不然你咋用findcontrol服务器端控件名呢
米娅 2010-09-15
  • 打赏
  • 举报
回复
这个gridview既然你给了值,当然可以直接在后台取值啊。



如果有多行,你在gridview里在加一个模板列,放一个按钮,按钮有这样一个属性:commandArgurment='<%#Eval("Name") %>
'

点击按钮后在后台
button btn=(button)sender;
btn.commandArgurment这样也可以去到。



如果你要用循环的话

for(int i=0;i<GridView1.rows.count;i++)

Lable lb=(Lable)GridView1.rows[i].cells[0].findcontrol("控件名称")
if(lb!=null)
{
....
}

MSDNXGH 2010-09-15
  • 打赏
  • 举报
回复
放label好点,
后台这样读取,
label a = (label)gridview1.Controls[0].FindControl("label1");
string b=a.text.tostring();
MSDNXGH 2010-09-15
  • 打赏
  • 举报
回复
放label好点,
后台这样读取,
label a = (label)DataList1.Controls[0].FindControl("label1");
string b=a.text.tostring();
七爷 2010-09-15
  • 打赏
  • 举报
回复
html标签 或服务器控件
  • 打赏
  • 举报
回复
你直接在后台用gridview1.FindControl("") as Lable 但是你要把<%#Eval("Name") %>绑定在lable中才可以获得,
juxianxiang 2010-09-15
  • 打赏
  • 举报
回复
一定要这样吗,其他有方法了,不放label行不行?
lqkankan 2010-09-15
  • 打赏
  • 举报
回复
放个 服务器控件 label 给这个 label 的 text = "<%# Eval("name")%>"

后台 循环取 label 值 就可以了

bourbon1795 2010-09-15
  • 打赏
  • 举报
回复
因为你是用的Eval绑定,所以必须要用一个控件。用来绑值
                <ItemTemplate>
<asp:Label ID="Label2" runat="server"
Text='<%#Eval("Name") %>
'></asp:Label>
</ItemTemplate>


然后在cs里面写
string strName=((lable)(GridView1.rows【i】。findcontrol("lable1")。ToString();
blank223 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 net_lover 的回复:]

放Label不如放Literal,Label会产生垃圾代码span
[/Quote]
+1
纯唇Yu弄 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 net_lover 的回复:]

完整的测试代码
HTML code
<%@ Page Language="C#" EnableViewState="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<scrip……
[/Quote]
++

62,046

社区成员

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

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

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

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