C # как получить подробный gridView2 (master-Detail) FocusedColumn.FieldName? (Программно)

#c# #gridview #devexpress

#c# #gridview #devexpress

Вопрос:

Мне удается создать основную деталь, которая показана на изображении вложения. gridControl1 состоит из 2-х видов сетки, MainView: GridView1 (который является основной таблицей: имя таблицы данных: tableSalesOrder) и InfoDetails (Level1): gridView2 (который является подробной таблицей: имя таблицы данных: tableDetail).

Оба приведенных ниже кода являются успешными для события двойного щелчка.

  gridView1.DoubleClick  = gridView1_DoubleClick;
 gridView2.DoubleClick  = gridView2_DoubleClick;
  

Моя проблема : —

Приведенный ниже код является успешным, как и мой GridView1.FocusedColumn.FieldName == «ItemCode».

     private void gridView1_DoubleClick(object sender, EventArgs e)
    {
        object obj;
        string code;
        if (gridView1.FocusedColumn.FieldName == "ItemCode")
        {
            obj = gridView1.GetFocusedRowCellValue("ItemCode");
            if (obj == null) return;
            code = obj.ToString();
            PromptItemForm(code);
        }
    }
  

Но когда я пытаюсь gridView2_DoubleClick (который для раздела просмотра подробной сетки), мой gridView2.FocusedColumn.FieldName == «DocNo» или gridView2.GetFocusedRowCellValue(«DocNo») не удается получить значение в разделе «подробная сетка». В нем отображается только код элемента, как получить значение для процедуры ниже 2 в разделе просмотра подробной таблицы?

   gridView2.FocusedColumn.FieldName == "DocNo"
  gridView2.GetFocusedRowCellValue("DocNo")
  

Я всю ночь гуглил, но пока не смог найти ни одного намека. Нужна помощь мастера.
Спасибо,

Набор данных и таблица данных, я сделал ссылку ниже кода

                  orderData.Tables.Add(tableSalesOrder);
                 orderData.Tables.Add(tableDetail);
                 orderData.Relations.Add("InfoDetails", tableSalesOrder.Columns["ItemCode"], tableDetail.Columns["ItemCode"]);
                 DataRelation orderRelation = orderData.Relations["InfoDetails"];
                 gridControl1.DataSource = tableSalesOrder;
                 gridControl1.ShowOnlyPredefinedDetails = false;
  

код для проверки имени и значения столбца gridView2, я кодирую, как показано ниже

           GridView gridView2 = (GridView) gridView1.GetDetailView(gridView1.FocusedRowHandle, 0);
  

к сожалению, возникла ошибка, которую я не смог решить. это работает при условии, что я не нажимаю на другую ячейку основного раздела. Появится сообщение об ошибке объекта; как только я щелкну другую ячейку в разделе master, и я вернусь, чтобы щелкнуть мою предыдущую ячейку detail.

введите описание изображения здесь

Ответ №1:

Как это объясняется в статье о шаблонах деталей и представлениях клонов:

все подробные представления, отображаемые во время выполнения, являются клонами абстрактного подробного представления, называемого подробным шаблоном

gridView2 в вашем случае — это представление шаблона для всех подробных представлений, создаваемых при расширении пользователем основной строки. Представления шаблонов действуют как хранилище настроек представления и не участвуют в реальных процессах.

Для работы с конкретным представлением вам необходимо получить соответствующий клон представления шаблона. Существует несколько подходов к его получению.

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

  • Вы можете использовать GridControl .Свойство FocusedView для ссылки на представление, которое в данный момент сфокусировано в GridControl. Это может быть основной вид или подробный вид, в зависимости от того, где пользователь помещает фокус.

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

Комментарии:

1. До сих пор не понятен совет, это мой пример идеи кода stackoverflow.duapp.com/questions/28096968 / … к сожалению, работает только частично, мне нужен мастер рисунка-ссылка на детали может быть пропущена из-за проблемы или необходимости перекодирования

2. Причина возникнет проблема, потому что GridView1 . В FocusedRowHandle произошли изменения, мне нужно найти код, когда я нажимаю на любую ячейку сведений о строке, он может подробно указать, в какой строке он находится.

Ответ №2:

Я решил это с помощью приведенного ниже кода Google с небольшими изменениями в соответствии со структурой программы.

  GridView detailView = sender as GridView;
 GridView gv = (GridView)gridView1.GetDetailView(detailView.SourceRowHandle, 0);