Как программно заполнить столбец сетки (гиперссылки) динамически, а затем использовать значение столбца в качестве URL? - PullRequest
0 голосов
/ 10 сентября 2010

Я загрузил DataTable с 4 элементами и прикрепил его к набору данных. Я связал набор данных с GridView. Я использую следующий код для заполнения GridView:

ds.Tables.Add(dt);  
GridView1.DataSource = ds.Tables[0];
foreach (DataColumn dcc in ds.Tables[0].Columns)  
{
    HyperLinkField mycol = new HyperLinkField();
    mycol.DataTextField = dcc.Caption.ToString();

    mycol.HeaderText = dcc.Caption;
    mycol.Target="_blank";
    mycol.HeaderStyle.Width = 10;
    mycol.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    mycol.ItemStyle.ForeColor = System.Drawing.Color.Black;
    GridView1.Columns.Add(mycol);
    mycol.Visible = true;
}
GridView1.DataBind();

Это работает очень хорошо и заполняет 4 столбца Gridview сверху вниз, слева направо, как и предполагалось. То, что я хотел бы сделать, это сделать NavigateURL каждого столбца фактическим значением в столбце. Например, значения Url # представляют значения, напечатанные в Gridview, но я также хочу, чтобы они были URL-адресами гиперссылок?

COl1    Col2    Col3    Col4
Url1    Url2    Url3    Url4
Url5    Url6    Url7    Url8

Любые предложения будут оценены. Конечная цель состоит в том, чтобы выполнить SQL-запрос, извлекая URL-адреса из базы данных, а затем заполняя столбцы GridView сверху вниз, слева направо значениями, полученными в запросе, и делая каждую гиперссылку. Если есть лучший способ сделать это, я был бы признателен за руль в правильном направлении.

1 Ответ

1 голос
/ 10 сентября 2010

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

protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow){
    var item = (DataRow)e.Row.DataItem;
    //I'm assuming the type is DataRow from you above example
    var linkCol = (HyperLinkField)e.Row.Cells[yourHyperLinkIndex] 
    linkCol.NavigateUrl = item["columnName"];
  }
}

РЕДАКТИРОВАТЬ: Под OnDataBound я хотел сказать OnRowDataBound

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...