2012-05-07 2 views
0

Я работаю над проектом, где мы используем только один GridView для отображения результатов по различным результатам Linq.Использование DataKeys с LinqToSql как DataSource на codebehind

Это GridView имеет:

AutoGenerateColumns = true; 

Существует результат Linq, что мы хотим использовать в качестве источника данных. В этом результате у нас есть столбцы, которые мы хотели бы использовать в качестве DataKeys. Когда мы привязываем результаты к нашему GridView, мы не хотим показывать эти столбцы пользователям.

Вот пример:

gvMyGrid.DataSource = from finalRows in summaryReport 
         select new 
         { 
          finalRows.a, 
          finalRows.b, 
          finalRows.c, 
          finalRows.d, 
          finalRows.e 
         }; 

gvMyGrid.DataKeyNames = new string[] { "a", "b" }; 
gvMyGrid.DataBind(); 

Таким образом, после этого связывания будет сделано, мы все еще видим «а» и «б» в качестве столбцов. мы можем использовать «а» и «б», когда мы называем:

gvReport.Datakeys 

, но мы не хотим, чтобы увидеть их на GridView.

Так что мой вопрос в том, как мы можем скрыть эти столбцы, но все еще использовать их как datakeys? Спасибо.

+0

Вы можете добавить "gvReport.Columns [0] .Visible = ложь;" чтобы скрыть определенный столбец, или вы можете установить «AutoGenerateColumns = false» и вручную определить таблицу. – Zachary

+0

Мне нужно установить AutoGenerateColumns в true, потому что у нас есть только один gridview для отображения всех результатов, и каждый набор результатов имеет различное количество столбцов. Так есть другой способ? – selo

ответ

1

Я не думаю, что существует прямой способ сделать это с помощью DataKeys, если AutoGenerateColumns = true;. Вы можете попробовать это. перед связыванием источника данных убедитесь, что ваши столбцы DataKey всегда находятся на одной позиции в коллекции. скажем, datakey «a» - это индекс столбца 1 и говорят, что datakey «b» - это индекс столбца 2. Так ли ваша коллекция возвращает 10 столбцов или 20 столбцов, все еще «a» и «b» должны быть в индексах 1 и 2. Тогда вы можете сделать это, чтобы скрыть столбцы.

 protected void gvReport_RowCreated(object sender, GridViewRowEventArgs e) 
     { 
      for (int i = 0; i < e.Row.Cells.Count; i++) 
      { 
       e.Row.Cells[1].Visible = false; 
       e.Row.Cells[2].Visible = false;     
      }    
     } 

GridView будет как

<asp:GridView ID="gvReport" runat="server" onrowcreated="gvReport_RowCreated" AutoGenerateColumns="true"> 
0

Некоторые варианты с верхней части моей головы:

  1. Не используйте AutoGenerateColumns и вместо явного крейт столбцов вы сделать хотите показывать.

  2. Явное скрыть столбцы ключа:

    gvMyGrid.Columns["a"].Visible = false; 
    gvMyGrid.Columns["b"].Visible = false; 
    
Смежные вопросы