将 DropDownList SelectedValue 绑定到 DataValueField 以进行 GridView 更新

发布于 2024-11-15 03:13:59 字数 2454 浏览 3 评论 0原文

好吧,伙计们,所以我读了这个: 如何在 GridView EditTemplate 中设置 DropDownList 的 SelectedValue

和我也有同样的问题。但是,我不想将所选值绑定到显示的文本,而是绑定到值。它们是从 SQLDataSource 中选择的不同属性。这是我的 DDL 代码及其 SQLDataSource:

<asp:DropDownList ID="FoodCodeDropDownList" runat="server"
     DataSourceID="Plant_Carton_Food_List"
     DataTextField="Food_Description"
     DataValueField="PlantMaterial_FoodID"
     SelectedValue='<%# Bind("PlantMaterial_FoodID") %>' >
</asp:DropDownList>
<asp:SqlDataSource ID="Plant_Carton_Food_List" runat="server" 
     ConnectionString="<%$ ConnectionStrings:OMSConnectionString %>" 
     SelectCommand="SELECT   P.PlantMaterial_FoodID,
               M.Material_SAP_Value + ' - ' + MD.SAP_Long_Description AS Food_Description 
          FROM Plant_Carton_Food AS P 
          LEFT OUTER JOIN Material_Descriptions AS MD 
               ON P.PlantMaterial_FoodID = MD.Material_ID 
          LEFT OUTER JOIN Materials AS M 
               ON P.PlantMaterial_FoodID = M.Material_ID">
 </asp:SqlDataSource>

这是 GridView 的(删节的)SQLDataSource:

   <asp:SqlDataSource ID="Plant_Carton_Table" runat="server" 
        OldValuesParameterFormatString="old_{0}"
        ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
        OnInserting="Plant_Carton_Food_Table_Inserting"
        OnInserted="Plant_Carton_Food_Table_Inserted"
        InsertCommand="spPlantCartonInsert" InsertCommandType="StoredProcedure" 
        SelectCommand="spPlantCartonSelect" SelectCommandType="StoredProcedure" 
        UpdateCommand="spPlantCartonUpdate" UpdateCommandType="StoredProcedure">
        <UpdateParameters>
            <asp:Parameter Name="Active_Case"           Type="Boolean" />
            <asp:Parameter Name="PlantMaterial_FoodID"  Type="String" />
            <asp:Parameter Name="PlantMaterial_CaseID"  Type="String" />
            ...
        </UpdateParameters>
        ...
    </asp:SqlDataSource>

最后,我的例外:

数据绑定:“System.Data.DataRowView” 不包含以下属性 命名为“PlantMaterial_FoodID”。

我确实不太了解如何通过 GridView 编辑模板进行数据绑定,但我能够看到正确的值通过 OnRowCommand 事件处理程序传递以进行更新。如何将这些值传播到 SQLDataSource 而不会出现 NULL?

现在,我想任何关于 GridView 模板的数据绑定如何工作的解释都会是有益的。谢谢!

Ok guys, so I read this:
How to set SelectedValue of DropDownList in GridView EditTemplate

and I'm having the same issue. However, I don't want to bind the selected value to the displayed text, but instead the values. They are different attributes selected from a SQLDataSource. Here is my DDL code with its SQLDataSource:

<asp:DropDownList ID="FoodCodeDropDownList" runat="server"
     DataSourceID="Plant_Carton_Food_List"
     DataTextField="Food_Description"
     DataValueField="PlantMaterial_FoodID"
     SelectedValue='<%# Bind("PlantMaterial_FoodID") %>' >
</asp:DropDownList>
<asp:SqlDataSource ID="Plant_Carton_Food_List" runat="server" 
     ConnectionString="<%$ ConnectionStrings:OMSConnectionString %>" 
     SelectCommand="SELECT   P.PlantMaterial_FoodID,
               M.Material_SAP_Value + ' - ' + MD.SAP_Long_Description AS Food_Description 
          FROM Plant_Carton_Food AS P 
          LEFT OUTER JOIN Material_Descriptions AS MD 
               ON P.PlantMaterial_FoodID = MD.Material_ID 
          LEFT OUTER JOIN Materials AS M 
               ON P.PlantMaterial_FoodID = M.Material_ID">
 </asp:SqlDataSource>

Here is the (abridged) SQLDataSource of the GridView:

   <asp:SqlDataSource ID="Plant_Carton_Table" runat="server" 
        OldValuesParameterFormatString="old_{0}"
        ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
        OnInserting="Plant_Carton_Food_Table_Inserting"
        OnInserted="Plant_Carton_Food_Table_Inserted"
        InsertCommand="spPlantCartonInsert" InsertCommandType="StoredProcedure" 
        SelectCommand="spPlantCartonSelect" SelectCommandType="StoredProcedure" 
        UpdateCommand="spPlantCartonUpdate" UpdateCommandType="StoredProcedure">
        <UpdateParameters>
            <asp:Parameter Name="Active_Case"           Type="Boolean" />
            <asp:Parameter Name="PlantMaterial_FoodID"  Type="String" />
            <asp:Parameter Name="PlantMaterial_CaseID"  Type="String" />
            ...
        </UpdateParameters>
        ...
    </asp:SqlDataSource>

And, finally, my exception:

DataBinding: 'System.Data.DataRowView'
does not contain a property with the
name 'PlantMaterial_FoodID'.

I really don't have much knowledge on how databinding through the GridView Edit templates work, but I was able to see that the correct values pass through the OnRowCommand event handler for updates. How do I propagate these values to the SQLDataSource without getting NULL?

Right now, I guess any explanation on how databinding with GridView templates work in general would be beneficial as well. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

⊕婉儿 2024-11-22 03:13:59

这并不是问题的真正答案,而是一种解决方法......但它对我有用。

我将 PlantMaterial_FoodID 作为隐藏列添加到 GridView 中,并更改 DropDownList 上的 SelectedValue 绑定以引用此新列,如下所示。

新列

<asp:TemplateField HeaderText="Food ID" SortExpression="Food_ID">
    <EditItemTemplate>
        <asp:Label ID="FoodIDLabel" runat="server" Text='<%# Eval("Food_ID") %>'</asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="FoodIDLabel" runat="server" Text='<%# Bind("Food_ID") %>'</asp:Label>
    </ItemTemplate>
</asp:TemplateField>

...这是新绑定

<asp:DropDownList ID="FoodCodeDropDownList" runat="server"
    DataSourceID="Plant_Carton_Food_List" DataTextField="Food_Description"
    DataValueField="PlantMaterial_FoodID" SelectedValue='<%# Bind("Food_ID") %>'
</asp:DropDownList>

这有效地将选定的下拉列表索引设置为正确的值。

This isn't really an answer to the question, but instead a workaround... but it works for me.

I added PlantMaterial_FoodID as a hidden column into the GridView and changed the SelectedValue binding on the DropDownList to reference this new column, as shown below.

New Column

<asp:TemplateField HeaderText="Food ID" SortExpression="Food_ID">
    <EditItemTemplate>
        <asp:Label ID="FoodIDLabel" runat="server" Text='<%# Eval("Food_ID") %>'</asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="FoodIDLabel" runat="server" Text='<%# Bind("Food_ID") %>'</asp:Label>
    </ItemTemplate>
</asp:TemplateField>

...and here is the new binding

<asp:DropDownList ID="FoodCodeDropDownList" runat="server"
    DataSourceID="Plant_Carton_Food_List" DataTextField="Food_Description"
    DataValueField="PlantMaterial_FoodID" SelectedValue='<%# Bind("Food_ID") %>'
</asp:DropDownList>

This effectively sets the selected dropdownlist index to the correct value.

迷乱花海 2024-11-22 03:13:59

您是否检查过 PlantMaterial_FoodID 的拼写是否与 SqlDataSource SelectCommand 中的拼写完全相同?

Have you checked that PlantMaterial_FoodID is spelled exactly as in the SqlDataSource SelectCommand?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文