首页 新闻 会员 周边 捐助

ASP.NET 如何获取RowDataBound事件下e.Row.DataItem的单个值

0
悬赏园豆:30 [已解决问题] 解决于 2013-08-21 13:36

我要获取的这一列我把它转换成了模板列的 该列的源代码如下:

<asp:TemplateField HeaderText="卖家档案">
<ItemTemplate>
<a href="#"><%#Eval("my_shop")%></a>
</ItemTemplate>
</asp:TemplateField>

之前看过一个帖子 说可以用以下的方式来获取值:

DataRowView myrows = (DataRowView)e.Row.DataItem;
string s=myrows["数据库列字段名"].tostring();

我试过了,还是不行,直接报如下错误:
无法将类型为“<>f__AnonymousType1`8[System.String,System.Decimal,System.Nullable`1[System.DateTime],System.String,System.String,System.String,System.Nullable`1[System.Decimal],System.String]”的对象强制转换为类型“System.Data.DataRowView”。

求高手指点迷津..............................

JasonGu0的主页 JasonGu0 | 初学一级 | 园豆:4
提问于:2013-08-12 10:45
< >
分享
最佳答案
0

如果你是用GridView1里面的模板的话,可以用下面方法

你把你的<a href="#">这行代码中a 加id 和 runat="server"如:id="hrf" runat="server"        

for (int index = 0; index < GridView1.Rows.Count; index++)
{
       System.Web.UI.HtmlControls.HtmlAnchor ha = GridView1.Rows[index].Cells[0].FindControl("hrf") as System.Web.UI.HtmlControls.HtmlAnchor;
       string str = ha.InnerText;
}

这样就可以得到每个链接的文本了。

其它地方你也可以用.FindControl("hrf")方法查找特定的控件。

 

这样<a href="#"><%#Eval("my_shop")%></a>

因为不是服务器控件,在后台是看不到的。加上runat="server"才能在后台代码中找到这个控件。

收获园豆:6
Albert Fei | 老鸟四级 |园豆:2102 | 2013-08-12 11:37
其他回答(4)
0

e.Row.Cells[列的索引].ToString();

收获园豆:6
差生 | 园豆:3 (初学一级) | 2013-08-12 10:56

这样获取不到值 我试过了 

支持(0) 反对(0) JasonGu0 | 园豆:4 (初学一级) | 2013-08-12 15:36
0

贴多点代码出来

收获园豆:6
Yu | 园豆:12990 (专家六级) | 2013-08-12 11:20
        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DataRowView row = (DataRowView)e.Row.DataItem;
                string s = row["my_shop"].ToString();
支持(0) 反对(0) JasonGu0 | 园豆:4 (初学一级) | 2013-08-12 15:38
以下是源文件 代码:
 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
                                            BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px"
                                            CellPadding="4" EnableModelValidation="True" OnPageIndexChanging="GridView1_PageIndexChanging"
                                            Width="100%" OnRowDataBound="GridView1_RowDataBound" Height="256px" 
                                            DataKeyNames="Tid" onselectedindexchanged="GridView1_SelectedIndexChanged">
                                            <Columns>
                                                <asp:BoundField DataField="Tid" HeaderText="订单编号" />
                                                <asp:TemplateField HeaderText="买家档案">
                                                    <ItemTemplate>
                                                        <a href="#">
                                                            <%#Eval("Buyer_info") + " / " + Eval("Buyer_name")%></a>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
                                                <asp:TemplateField HeaderText="卖家档案">
                                                    <ItemTemplate>
                                                        <a href="#">
                                                            <%#Eval("my_shop")%></a>
                                                    </ItemTemplate>
                                                </asp:TemplateField>
支持(0) 反对(0) JasonGu0 | 园豆:4 (初学一级) | 2013-08-12 15:39
0

要先判断一下:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    ...
}
收获园豆:6
dudu | 园豆:30757 (高人七级) | 2013-08-12 11:33

判断了的  还是没有值

支持(0) 反对(0) JasonGu0 | 园豆:4 (初学一级) | 2013-08-12 15:39

@恒_心: 

“<a href="#"><%#Eval("my_shop")%></a>” 要用服务器控件

推荐一个参考:how to capture the value of a gridview template field

支持(0) 反对(0) dudu | 园豆:30757 (高人七级) | 2013-08-12 16:00

@恒_心: 是不能取值还是报错呢

支持(0) 反对(0) Yu | 园豆:12990 (专家六级) | 2013-08-12 16:03
0

将DataRowView换成你的数据实体对象。

var list=new List<Model>();

DataSource=list;

那么就使用Model model = (Model)e.Row.DataItem;

收获园豆:6
幻天芒 | 园豆:37207 (高人七级) | 2013-08-12 12:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册