ASPxGridView - Как получить выбранную строку в сетке деталей GridView мастер-детали? - PullRequest
2 голосов
/ 28 декабря 2011

Может кто-нибудь объяснить, как я могу получить доступ к выбранной строке сетки подробностей в Мастер-деталь DevExpress ASPxGridView? Я нашел пример на сайте поддержки devexpress Но яЯ не могу получить его, Орк, я работаю с DevExpress версии 11.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Я нашел способ получить выбранную строку сетки подробностей, но не уверен, насколько «рекомендовано» делать это таким образом, но для меня это работает нормально, я добавил событие onload() в сетку деталей, а затем Я смог получить доступ к этому экземпляру gridview, приведя его к ASPxGridView.

Вот мой код, детальная сетка:

<Templates>
            <DetailRow>

                <dx:ASPxGridView ID="detailGrid" runat="server"   DataSourceID="SqlDataSource2" 
                    Width="100%" OnBeforePerformDataSelect="detailGrid_DataSelect" 
                         KeyFieldName="InvoiceID"
                         EnableCallBacks="False" 
                         onload="detailGrid_Load"
                          >

и затем я обрабатываю событие onoad() следующим образом:

ASPxGridView gridView;
protected void detailGrid_Load(object sender, EventArgs e)
{

    gridView = sender as ASPxGridView;
    gridView.SelectionChanged += new EventHandler(gridView_SelectionChanged);

}

Итак, я только что создал экземпляр ASPxGridView для детальной сетки, и теперь я могу использовать его событие SelectionChanged().

private static int invoiceID;

    void gridView_SelectionChanged(object sender, EventArgs e)
    {
        invoiceID = Convert.ToInt64(gridView.GetSelectedFieldValues("InvoiceID")[0]);
    }
0 голосов
/ 30 августа 2016

Заранее спасибо пользователю 189756 за ответ, потому что он полезен, но я полагаю, что многие люди сталкиваются с такой же проблемой здесь, и потому что предыдущий ответ не актуален для текущих версий DevExpress Asp.Net WebForms, так как он был написан почти 5 лет назад я просто хотел добавить важный момент здесь. Чтобы обработать событие выбора на стороне сервера, необходимо указать его в атрибутах ASPxGridView следующим образом:

<dx:ASPxGridView ID="MainGrid" runat="server">
    <Columns>
        <!-- Grid Columns here -->
    </Columns>
    <Templates>
        <DetailRow>
            <dx:ASPxGridView ID="DetailGrid" runat="server" KeyFieldName="ID" OnInit="Grid_Init" OnSelectionChanged="Grid_SelectionChanged">
                <Columns>
                    <!-- Grid Columns here -->
                </Columns> 
                <!-- Now the following code is relevant to process Selection Event on Server Side-->
                <SettingsBehavior AllowFocusedRow="true"
                    AllowSelectByRowClick="true"
                    ProcessFocusedRowChangedOnServer="true"
                    ProcessSelectionChangedOnServer="true"/>
                <SettingsDetail IsDetailGrid="True" />
            </dx:ASPxGridView>
        </DetailRow>
    </Templates>
    <SettingsDetail ShowDetailRow="True" />
</dx:ASPxGridView>

Обратите внимание, что я использовал выбор строки по клику, но есть и другой вариант, использующий флажки. Так что теперь единственное, что вам нужно сделать, это реализовать обработчик событий выбора в коде позади.

protected void Grid_SelectionChanged(object sender, EventArgs e)
{
    ASPxGridView grid = sender as ASPxGridView;
    for (int i = 0; i < grid.VisibleRowCount; i++) // Loop through selected rows 
    {
        if (grid.Selection.IsRowSelected(i)) // do whatever you need to do with selected row values
        {
// now use pre-initialized List<object> selectedList to save 
            selectedList.Add(Convert.ToInt32(grid.GetRowValues(i, "ID")));
        }
    }
    ViewState["SelectedList"] = selectedList;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...