C # Winforms: сопоставление локальных документов и извлечение их через ячейки гиперссылки Datagridview

#c# #winforms #datagridview #hyperlink #mapping

#c# #winforms #datagridview #гиперссылка #сопоставление

Вопрос:

Я использую winform 4.7. в Visual studio 2019. Во-первых, я переношу некоторые документы, такие как счета за электричество, газ и досуг с идентификатором человека 3, идентификатором человека 4 и так далее на 3 разных языках. У меня есть datagridview, который получает свои данные из таблицы sql с columnn 1 = id (что соответствует идентификатору пользователя моих документов на моем локальном компьютере). Что я пытаюсь сделать: когда я нажимаю на любую ячейку datagridview первого столбца (столбец идентификатора), открывается новая форма, задающая мне выбор между языком EN / FR / IT (я предполагаю, что список в форме), спрашивает меня типдокумент «счет за электричество» / «счет за газ» / «счет за досуг», а затем создайте мою выходную строку с ответами, которые я дал или нажал. Допустим, например, я дважды щелкнул по идентификатору 3 в datagridview и выбрал «Английский» и «счет за электричество» из появившейся формы. Затем он создает строку, которая в конечном итоге будет гиперссылкой, подобной этой: C://folder/personId3_electricityBill_EN это даст мне счет за электричество персоны 3 на английском языке, хранящийся на моем компьютере по этому адресу.

Я работал над предыдущим подобным проектом, где я «сопоставлял» каждый документ на каждом языке для каждого пользователя в электронной таблице и просматривал его. Но это было в Excel…

Теперь я использую datagridview для отображения своих данных, и нет никакой другой вкладки, где я мог бы сопоставить данные (думаю, к лучшему). Прежде чем я куда-нибудь пойду, для того, что я хочу сделать, есть ли более эффективный способ использования C # с winform (возможно, отображение в словаре или любом объекте)? Кроме того, я обнаружил, что в datagridview я могу либо щелкнуть по ячейке и получить ее значение, которое может быть хорошей отправной точкой, либо я могу напрямую изменить весь свой столбец 1 в ячейках гиперссылок.

Каковы были бы наилучшие варианты?? Заранее спасибо за помощь

Обновить

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

 private void dataGridViewDoc_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        var ID = dataGridViewDoc.CurrentCell.Value;
        if (dataGridViewDoc.CurrentCell == null ||
            dataGridViewDoc.CurrentCell.Value == null ||
            e.RowIndex == -1) return;
        if (dataGridViewDoc.CurrentCell.ColumnIndex.Equals(0))
        {
            var FormDocument = new FormDocument();
            FormDocument.ISINTextBoxValue = (string)ID;
            FormDocument.TopMost = true;
            FormDocument.Show();
        } 
    }
 

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

1. Обычно я заполняю DGV с помощью DataTable (использую адаптер из запроса databae для таблицы). Затем из таблицы данных используется dt. AsEnumerable().Выберите(x => x.Field<int>(«id»))

2. @jdweng спасибо, это то, что я делаю и для заполнения DGV. Итак, вы перебираете ячейки вашего dgv, если я хорошо понимаю. Я публикую обновление своего кода, теперь мне нужно найти наиболее эффективный способ построения моей строки

3. Зачем вам нужна строка? Вы можете передать форму любому объекту c #.

4. потому что мне нужно получить доступ к документам по их адресу. Адрес счета за электроэнергию на английском языке person3 не будет совпадать с адресом счета за электроэнергию на итальянском … один будет что-то вроде C // folder // Person3 // electricitybill_EN, а другой: C // folder // Person3 // electricitybill_IT

5. Вы можете сделать то же самое, что и в Excel. Рабочий лист — это двухмерный объект со строками и столбцами. Таким образом, вы можете создать двумерный объект на c #. Обычно я использую DataTable, но вы также можете использовать List<Список<строка>> или словарь.