#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);