Привязка DropDownList SelectedValue к DataValueField для обновления GridView - PullRequest
1 голос
/ 09 июня 2011

Хорошо, ребята, так что я прочитал это: Как установить SelectedValue DropDownList в GridView EditTemplate

и у меня та же проблема. Однако я не хочу привязывать выбранное значение к отображаемому тексту, а вместо этого к значениям. Это разные атрибуты, выбранные из источника 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>

Вот (сокращенный) SQLDataSource 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>

И, наконец, мое исключение:

Привязка данных: 'System.Data.DataRowView' не содержит свойство с имя 'PlantMaterial_FoodID'.

Я действительно не очень разбираюсь в том, как работает привязка данных через шаблоны редактирования GridView, но я смог убедиться, что правильные значения проходят через обработчик событий OnRowCommand для обновлений. Как передать эти значения в SQLDataSource, не получая NULL?

Прямо сейчас, я полагаю, что любое объяснение того, как связывание данных с шаблонами GridView в целом работает, также было бы полезно. Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

На самом деле это не ответ на вопрос, а обходной путь ... но он работает для меня.

Я добавил PlantMaterial_FoodID в качестве скрытого столбца в GridView и изменил привязку SelectedValue наDropDownList для ссылки на этот новый столбец, как показано ниже.

Новый столбец

<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>

Эффективно устанавливает для выбранного индекса выпадающего списка правильное значение.

0 голосов
/ 10 июня 2011

Вы проверили, что PlantMaterial_FoodID написано точно так же, как в SqlDataSource SelectCommand?

...