BobbyStrain Ответов: 1

Фильтр источника данных на основе выбора gridview


I have a web page built with asp.net VB. The database is one with family members. There are three databound controls; gridview and 2 detailsview. They are working except for one details view which is bound to a datasource using a filter. I want to display information in the first detailsview of the selection from the datagrid view. This works OK. I want the second detailsview to display the parent information for the selection in the gridview. The parent and child are in the same table. The parent ID is in a field that is not a key. I coded the datasource from an example, but the detailsview displays the information for the selected row, not the parent. I can change the code to set the filterexpression to ID=4, for example and the details view displays the information for row 4.
Я считаю, что у меня нет правильно установленного параметра FilterParameter. Что я использую в качестве PropertyName= в параметре, чтобы получить значение из выбранного поля parentId строки? Использование SelectedValue возвращает столбец идентификатора gridview, который является ключом.

<asp:SqlDataSource ID="SqlDataSource4" runat="server" 
        SelectCommand="SELECT ID, Last_Name, First_Name FROM contacts"
        FilterExpression="ID='{0}'" 
         ConnectionString="<%$ ConnectionStrings:mystrainfamilyConnectionString %>"
        ProviderName="<%$ ConnectionStrings:mystrainfamilyConnectionString.ProviderName %>" >    
            <FilterParameters>
                <asp:ControlParameter Name="ID" ControlID="GridView1" DefaultValue="1"  
                    PropertyName="SelectedValue" />
            </FilterParameters>
    </asp:SqlDataSource> 


Что я уже пробовал:

Я не нашел ничего, что объясняло бы правильное имя свойства для параметра фильтра.

1 Ответов

Рейтинг:
9

Vincent Maverick Durano

Привет,

Я на самом деле не использовал волшебника DataSources для сложных сценариев, поэтому я действительно не могу дать прямое решение тому, что у вас сейчас есть.

На твоем месте я бы воспользовался этим ADO.NET с DataSets/DataTable. Источник данных мастера, такой как SqlDataSource хороши, но для меня я бы предпочел использовать DataSets с SqlCommands - Я назвал его жестко закодированным набором данных, потому что я могу написать там свою собственную логику и делать такие вещи, как Sorting и Filtering. SqlDataSource это хорошо и может быть предпочтительнее, если нужно сгенерировать простой запрос. Но это имеет тенденцию становиться сложным и запутанным, когда речь заходит о переплетенных/сложных запросах (точно так же, как то, что вы имеете сейчас). SqlDataSource кроме того, его трудно поддерживать в случае огромных блоков кода, и нам приходится генерировать множество DataSources для различных элементов управления данными. Там, где, как и в случае жестко закодированной sql databind, мы можем повторно использовать код без каких-либо сбоев, изменяя базовый запрос здесь и там в соответствии с требованиями, а также намного проще поддерживать его.

Если вам неудобно работать с Sql-запросами, вы также можете использовать ORM, например LINQ to SQL или Entity Framework в качестве источника данных для ваших элементов управления данными.

Только мои 0,2 доллара.


BobbyStrain

Винсент, Спасибо за ответ. У меня есть только 3 источника данных, так что весь код не слишком перегружен. А я мало что делаю. Я нашел способ заставить его работать, добавив текстовое поле и фильтруя текст текстового поля. У меня есть аналогичное настольное приложение, для которого я использую наборы данных. Он работает плавно, используя запросы.