Установить DetailsView как выбранную строку GridView - PullRequest
0 голосов
/ 10 мая 2010

Я создаю страницу GridView / DetailsView. У меня есть сетка, которая отображает кучу строк, когда строка выбрана, она использует DetailsView, чтобы разрешить вставку / обновление.

Мой вопрос: как лучше связать их? Я не хочу снова обращаться к веб-службе, все нужные мне данные находятся в выбранной строке вида сетки. В основном у меня есть 2 отдельных источника данных, которые используют один и тот же «DataObjectTypeName», первый источник данных извлекает данные, а другой для выполнения CRUD.

Как лучше всего перенести строку «Выбранное представление таблицы» в «Подробное представление»? Должен ли я вручную обрабатывать события вставки / обновления и сам вызывать источник данных?

Нет ли способа связать эти два элемента, чтобы они использовали один и тот же источник данных?

  <asp:GridView ID="gvDetails" runat="server" DataKeyNames="ID, Code"
                DataSourceID="odsSearchData" >
   <Columns>
        <asp:BoundField DataField="RowA" HeaderText="A" SortExpression="RowA" />
        <asp:BoundField DataField="RowB" HeaderText="B" SortExpression="RowB" />
        <asp:BoundField DataField="RowC" HeaderText="C" SortExpression="RowC" />



    ....Code...

 <asp:DetailsView ID="dvDetails" runat="server" DataKeyNames="ID, Code"
                DataSourceID="odsCRUD" GridLines="None" DefaultMode="Edit" AutoGenerateRows="false"
                Visible="false" Width="100%">
         <Fields>
            <asp:BoundField DataField="RowA" HeaderText="A" SortExpression="RowA" />
           <asp:BoundField DataField="RowB" HeaderText="B" SortExpression="RowB" />
           <asp:BoundField DataField="RowC" HeaderText="C" SortExpression="RowC" />

...

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Стандартный способ сделать это состоял бы в том, чтобы выбранный элемент griview был управляющим параметром для источника данных объекта, который вы подключили к подробному представлению. Вероятно, я бы не слишком беспокоился о затратах на получение данных, которые у вас уже есть, если только вы не обслуживаете пользователей с такими медленными соединениями, что вы хотите избежать любых обращений к веб-серверу.

Если вы действительно хотите избежать этого, вы можете извлечь данные из сетки, используя javascript / jquery, а затем выполнить вставку / обновление с помощью вызовов ajax. Это потребовало бы намного большего количества кодирования все же.

0 голосов
/ 17 декабря 2018

Это действительно старая тема, но в случае, если кто-то придет сюда в поисках ответа, как я, простое решение - добавить эту функцию в ваш код:

(Обратите внимание, что это работает только в том случае, если строки в GridView совпадают с записями в вашем DetailsView.)

protected void GridView1_OnSelectedIndexChanged(object sender, EventArgs e)
{
     DetailsView1.SetPageIndex(GridView1.SelectedIndex);
}

И измените GridView и DetailsView, чтобы включить эти параметры:

<asp:GridView ... OnSelectedIndexChanged="GridView1_OnSelectedIndexChanged" ... >
<asp:DetailsView ... AllowPaging="True" ... >

При этом выбранная страница в DetailsView будет соответствовать выбранному индексу в GridView.

Вы можете скрыть параметры подкачки в свойствах DetailsView, если вы не хотите, чтобы пользователи перемещались с использованием подкачки в DetailsView.

...