【问题标题】:How to get the value of a field that has been bound to a FormView如何获取已绑定到 FormView 的字段的值
【发布时间】:2016-12-04 19:13:06
【问题描述】:

我有<asp:FormView ID="FormView1" runat="server">

在我的代码隐藏 Page_Load 中,我将一个 SQL 数据源绑定到 FormView1。

我需要在 FormView1.DataBind(); 之后访问 Page_Load 中 DataSource 中某个字段的值。

在本地窗口调试期间,我可以看到 FormView1 的 DataItem 属性中的所有字段。

但是我无法弄清楚访问任何这些字段的值的代码。

注意:此字段未在表单中使用。我需要它的值来设置 asp:label 的可见性开/关。

FormView1.DataSource = from prop in dataContext.Properties
   join sub in dataContext.SuburbsWithProperties on prop.SuburbID equals sub.SuburbID
   where prop.PropertyID == propNo
   select new
   {
       prop.PropertyID,
       prop.SuburbID,
       prop.Rent,
   etc
}

**** 因此,在 ConnorsFan 的帮助下,我能够获得我的字段值。

var dataItem = formView1.DataItem as object;
var dataItemFields = dataItem.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(dataItem, null));
    var fieldValue = (string)dataItemFields["MyFieldName"];

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    (问题更新后下面的建议无效,说明数据源是LINQ查询)

    您可以将DataItem 转换为其实际类型,即DataRowView。然后您可以访问每个字段的值:

    DataRowView drv = FormView1.DataItem as DataRowView; int ID = (int)drv["ClientID"]; string name = (string)drv["ClientName"];


    另一方面,如果 Label 属于 FormView,则可以使用数据绑定表达式在标记中设置可见性条件:

    如果字段包含布尔值:

    <asp:Label runat="server" Visible='<%# Eval("fieldName") %>' ... />
    

    如果字段包含字符串:

    <asp:Label runat="server" Visible='<%# Eval("fieldName") == "Some value" %>' ... />
    

    【讨论】:

    • 不幸的是,DataRowView drv = FormView1.DataItem as DataRowView; 返回 null。在调试中FormView1.DataItem 肯定在那里。
    • 感谢 ConnorsFan,我会接受您对 &lt;asp:Label runat="server" Visible='&lt;%# Eval("fieldName") %&gt;' ... /&gt; 等的其他建议,因为我在这方面已经纠结太久了。但我仍然很想解决我的问题。
    • 如果您在 Locals 中看到 FormView1.DataItem,则应显示其数据类型。它是什么?不是 DataRowView?您可以在问题中插入 Locals 窗口的图像。
    • 它是匿名的,包含 {data1 = "test1", data2 = "sam", data3 = "bob"}。所以现在我想它需要变成一个集合。另一个帖子建议这个var dict = a.GetType().GetProperties().ToDictionary(x =&gt; x.Name, x =&gt; x.GetValue(a, null));,我稍后会尝试,但我现在必须去。 (我会回来报告)。
    • 我得看看你是如何定义你的数据源的。您可以在问题中添加相关代码吗?我以为您使用的是标准 SQL 查询。当我使用它时,每个 DataItem 都是一个 DataRowView。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多