ASP.NET详细信息视图。如何绑定不在对象数据源中的值

ASP.NET详细信息视图。如何绑定不在对象数据源中的值,asp.net,binding,detailview,Asp.net,Binding,Detailview,我有一个绑定到对象数据源(ODS)的ASP.NET DetailsView。我有ODS OnSelecting事件的方法,在这个方法中,基于从对象数据源返回的字段,我们进行另一个数据库查找,以获取记录的“风险”值 我的问题是如何绑定/评估并显示这个额外的“风险”字段,我发现这很困难,因为它没有将数据源绑定到detailsview 我已尝试将Label控件添加到DetailsView ItemTemplate,但无法向控件添加ID以在代码隐藏中引用它。有什么想法吗 更新这里的一些代码 下面是一些简

我有一个绑定到对象数据源(ODS)的ASP.NET DetailsView。我有ODS OnSelecting事件的方法,在这个方法中,基于从对象数据源返回的字段,我们进行另一个数据库查找,以获取记录的“风险”值

我的问题是如何绑定/评估并显示这个额外的“风险”字段,我发现这很困难,因为它没有将数据源绑定到detailsview

我已尝试将Label控件添加到DetailsView ItemTemplate,但无法向控件添加ID以在代码隐藏中引用它。有什么想法吗

更新这里的一些代码

下面是一些简单的示例代码,说明了我要做的事情

 <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="ObjectDataSource1">
        <Fields>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <div style="float: right">
                        <asp:Label  runat="server" Text="NEED RISK HERE"></asp:Label>
                    </div>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Button ID="ButtonUpdate" runat="server" CausesValidation="True" CommandName="Update"
                        Text="Update" />
                    &nbsp;
                    <asp:Button ID="ButtonCancelUpdates" runat="server" CausesValidation="False" CommandName="Cancel"
                        Text="Cancel" />
                </EditItemTemplate>
            </asp:TemplateField>
        </Fields>
    </asp:DetailsView>
    <br />
    <br />
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OnSelecting="ods1_Selecting"
        SelectMethod="GetMemoryDataTable" TypeName="AspMemoryDatatableDemo.MemoryDataTableProvider">
    </asp:ObjectDataSource>


数据集实际上将来自数据实体,但在本例中,我只使用内存中的数据表。

我将尝试在这里帮助您,但如果您向我们展示一些针对此类问题的代码,这将非常有帮助。是否尝试向对象数据源添加列?我假设您有某种数据表(如果没有,则将其转换为数据表)。所以让我们添加一列并重新绑定它


HTML
添加列之前的页面


添加列后的页面

谢谢。我用一些示例代码更新了我的问题,可能会有所帮助。我将ODS绑定到的数据集来自实体框架,只是一个数据库视图。我注意到在您的示例中,您向datatable添加了一个新列。我是否知道需要如何向实体添加新字段,或者在我的示例中datatable@Hevski数据库“视图”仍然是返回的数据表。无论如何,我非常确定dataview或gridview中显示的任何内容都可以格式化为DataTable,因此可以向其中添加行和/或列。如果希望对显示内容进行更多控制,请创建一个ASP Web API控制器,在其中建立数据库连接并获取/填充数据表,然后使用Newtonsoft的json.net库对其进行序列化,将其返回给API调用方,然后通过javascript呈现该表。我很久以前就开始这样做,而不是使用ASP,而且效果很好。
  public String GetRisk()
    {
        return "HIGH";
    }


    protected void ods1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
      // Get Risk based on row data
      // Need some way of showing this in the DetailsView

        GetRisk();
    }
<div>

<asp:GridView id="myGridView" AutoGenerateColumns="true" runat="server">

</asp:GridView>
    <br />
    <asp:TextBox ID="column_name" runat="server"></asp:TextBox>
    <asp:Button ID="addColumn" Text="Add Column" runat="server" />
</div>
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

    ' ===========================================================================
    '  This section is just to create a datatable. I assume you are already have one 
    '      that gets retrieved from a database somewhere.
    Dim dt As New DataTable ' create new test datatable

    With dt.Columns ' add columns to datatable
        .Add("id").AutoIncrement = True
        .Add("value")
    End With

    For i = 1 To 4 ' add some rows and values to the datatable.
        Dim msg = String.Empty
        Select Case i
            Case 1
                msg = "this"
            Case 2
                msg = "is"
            Case 3
                msg = "a test"
            Case 4
                msg = "table"
        End Select
        Dim r As DataRow = dt.NewRow()
        r("value") = msg
        dt.Rows.Add(r)
    Next i
    ' ===========================================================================

    myGridView.DataSource = dt ' set our datasource
    myGridView.DataBind() ' bind our data source

End Sub


Protected Sub addColumn_Click(sender As Object, e As EventArgs) Handles addColumn.Click
    Dim dt As DataTable = DirectCast(myGridView.DataSource, DataTable) ' get the current datatable used by your gridview.
    If Not String.IsNullOrWhiteSpace(column_name.Text) Then ' check if the new column name is null or empty.
        dt.Columns.Add(column_name.Text).DefaultValue = "new value" ' just here to add a default value. yours presumably will already have a value.
        myGridView.DataSource = dt ' update the datasource.
        myGridView.DataBind() ' bind the new datasource.

    End If
End Sub