Вопрос по c# – Ячейка гиперссылки в Winforms DataGridView

12

Error: User Rate Limit Exceeded

ContactType        |        Contact
------------------------------------
Phone              |       894356458
Email              |     [email protected]

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Я отредактировал свой ответ, объяснив, как лучше использовать мой первый вариант в вашем случае (скрыв один столбец и используя DataPropertyName), а также предложив второй вариант ответа, в котором вы храните текстовый столбец. David Hall

Ваш Ответ

1   ответ
20

DataGridView имеет тип столбца для этого,DataGridViewLinkColumn.

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

DataGridViewLinkColumn col = new DataGridViewLinkColumn();
col.DataPropertyName = "Contact";
col.Name = "Contact";       
dataGridView1.Columns.Add(col);

Вы также захотите скрыть автоматически сгенерированный текстовый столбец, который исходит из свойства Contact сетки.

Также как и сDataGridViewButtonColumn вам нужно самостоятельно обрабатывать взаимодействие с пользователем, отвечая наCellContentClick событие.


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

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        if (!System.Uri.IsWellFormedUriString(r.Cells["Contact"].Value.ToString(), UriKind.Absolute))
        {
            r.Cells["Contact"] = new DataGridViewTextBoxCell();
        }
    }
}

Вы также можете сделать это с другого направления, изменивDataGridViewTextBoxCell кDataGridViewLinkCell Я предлагаю эту секунду, так как вам нужно будет применить любые изменения, которые применяются ко всем ссылкам на каждую ячейку.

Это имеет то преимущество, что вам не нужно будет скрывать автоматически сгенерированный столбец, поэтому он может подойти вам лучше всего.

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    foreach (DataGridViewRow r in dataGridView1.Rows)
    {
        if (System.Uri.IsWellFormedUriString(r.Cells["Contact"].Value.ToString(), UriKind.Absolute))
        {
            r.Cells["Contact"] = new DataGridViewLinkCell();
            // Note that if I want a different link colour for example it must go here
            DataGridViewLinkCell c = r.Cells["Contact"] as DataGridViewLinkCell;
            c.LinkColor = Color.Green;
        }
    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Sandeep
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы