我要获取的这一列我把它转换成了模板列的 该列的源代码如下:
<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”。
求高手指点迷津..............................
如果你是用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"才能在后台代码中找到这个控件。
e.Row.Cells[列的索引].ToString();
这样获取不到值 我试过了
贴多点代码出来
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();
以下是源文件 代码: <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>
要先判断一下:
if (e.Row.RowType == DataControlRowType.DataRow) { ... }
判断了的 还是没有值
@恒_心:
“<a href="#"><%#Eval("my_shop")%></a>” 要用服务器控件
推荐一个参考:how to capture the value of a gridview template field
@恒_心: 是不能取值还是报错呢
将DataRowView换成你的数据实体对象。
var list=new List<Model>();
DataSource=list;
那么就使用Model model = (Model)e.Row.DataItem;