Привязка гиперссылок к GridView с использованием AutoGenerateColumns - PullRequest
2 голосов
/ 17 января 2011

У меня есть DataTable, в котором есть столбцы, которые генерируются динамически во время выполнения.Этот DataTable связан с GridView, для которого AutoGenerateColumns установлено в значение true.У меня возникла проблема с этим, поскольку некоторые данные в DataTable являются объектами HyperLink, поэтому вместо отображения фактической ссылки в таблице отображается «System.Web.UI.WebControls.HyperLink».

Обычно я просто использовал бы HyperLinkField в своем GridView, но, поскольку столбцы GridView генерируются автоматически, я не уверен, как это сделать.Есть идеи?

1 Ответ

2 голосов
/ 19 января 2011

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

Для этого решения вы можете сохранить гиперссылку в 2 столбцах - 1 для ссылки и 1 длятекст, который вы хотите отобразить, или если вы хотите, чтобы отображалось что-то общее (например, «Нажмите здесь»), вы можете просто сохранить ссылку (например, «http://example.com.au/Default.aspx").

protected void GridView1_RowBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        //add new header
        TableCell tc = new TableCell();
        tc.Text = "Groovy Link";
        e.Row.Cells.Add(tc);
        //hide original column that has been autobound - skip column we just added
        for (int i = 0; i < e.Row.Cells.Count - 1; i++)
        {
            BoundField field = (BoundField)((DataControlFieldCell)e.Row.Cells[i]).ContainingField;
            if (field.DataField == "AutoGeneratedColumnName")
                field.Visible = false;
        }
    }
    else if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //create new tablecell
        TableCell tc = new TableCell();
        //do a check to see if the data is stored as a hyperlink in DB
        if (DataBinder.Eval(e.Row.DataItem, "AutoGeneratedColumnName").ToString().StartsWith("<a") == true)
        {
            //create hyperlink
            HyperLink hyp = new HyperLink();
            hyp.NavigateUrl = DataBinder.Eval(e.Row.DataItem, "AutoGeneratedColumnName").ToString();
            hyp.Text = "click here";
            tc.Controls.Add(hyp);
        }
        else
        {
            //just text
            tc.Text = DataBinder.Eval(e.Row.DataItem, "AutoGeneratedColumnName").ToString()
        }
        //add tablecell to row
        e.Row.Cells.Add(tc);
        //hide original column that has been autobound
        for (int i = 0; i < e.Row.Cells.Count - 1; i++)
        {
            BoundField field = (BoundField)((DataControlFieldCell)e.Row.Cells[i]).ContainingField;
            if (field.DataField == "AutoGeneratedColumnName")
                field.Visible = false;
        }
    }
}
»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...