#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<Список<строка>> или словарь.