2014-10-20 3 views
3

У меня есть GridView, как показано ниже, в котором я хочу отображать результаты из хранимой процедуры в SQL Server. В зависимости от входов его аргументов, хранимая процедура возвращает разные результаты с различным количеством столбцов. Однако первые два столбца всегда являются measId и valSeq, которые считаются DataKeyNames в GridView. Я хочу отобразить все доступные столбцы в хранимой процедуре, но measId и valSeq. Вместо этого я хочу отобразить 2 TemplateField.Как скрыть столбцы в GridView?

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
    DataSourceID="SqlDataSource1" Width="100%" BackColor="#DEBA84" 
    BorderColor="#DEBA84" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
    CellSpacing="2" DataKeyNames="measId,valSeq" 
    onrowupdating="GridView_RowUpdating" Visible="False" 
    EmptyDataText="No data!" EnableModelValidation="True" 
    onrowdatabound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:TemplateField> 
     <HeaderTemplate> 
      <asp:CheckBox ID="cbCheckAll" runat="server" OnClick="javascript:selectAll(this)" /> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <asp:CheckBox ID="Checkbox1" runat="server" /> 
     </ItemTemplate> 
     <ItemStyle Width="25px" /> 
     </asp:TemplateField> 
     <asp:CommandField HeaderText="Action" ShowEditButton="True" /> 
    </Columns> 
    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> 
    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" 
     Font-Names="Verdana" Font-Size="Small" HorizontalAlign="Left" /> 
    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" Font-Names="Verdana" 
     Font-Size="X-Small" HorizontalAlign="Left" /> 
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> 
</asp:GridView> 

Я мог успешно объявить SqlDataSource для получения результатов из хранимой процедуры и связал его с GridView. GridView отображает TemplateFileds, а также все извлеченные столбцы из хранимой процедуры. Теперь я хочу скрыть столбцы measId и valSeq. Но я не мог найти никакого способа сделать это. Кажется, что я не могу получить доступ к полям, которые автоматически привязаны к GridView.

ответ

4

Я наконец-то нашел мой ответ here. Однако, поскольку я хотел скрыть третий столбец, мне пришлось добавить условный оператор. Следовательно, если вы хотите скрыть столбец 3, решение будет следующим:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
    { 
     if(e.Row.Cells.Count > 2) 
      e.Row.Cells[2].Visible = false; 
    } 
2
<style type="text/css"> 
    .hidden 
    { 
     display:none; 
    } 
</style> 

     <Columns> 
      <asp:BoundField HeaderStyle-CssClass="hidden" DataField="TemplateID" HeaderText="Template ID" 
       ReadOnly="True" SortExpression="TemplateID" > 
        <ItemStyle CssClass="hidden"/> 
      </asp:BoundField> 
      <asp:BoundField DataField="TemplateName" HeaderText="Template Name" 
       SortExpression="TemplateName" /> 
     </Columns> 
+1

Это не будет работать для столбцов, которые уже отображаются. Он просто добавляет новый скрытый столбец! – Fred

3

установить столбец невидимым с помощью события RowDataBound GridView.

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    e.Row.Cells[index].Visible = false; 
} 

0r

this.myGridview.Columns[0].Visible = false; 

Здесь 0 индекс столбца

Hiding column in GridView

protected void GridView_PreRender(object sender, EventArgs e) 
{ 
    foreach (DataControlField column in GridView1.Columns) 
     if (column.HeaderText == "XXXXXXX") 
      column.Visible = false; 
} 
+0

ОК. Я использовал 2 строки e.Row.Cells [x] .Visible = false; где x = 2 и x = 3, чтобы скрыть нужный мне столбец (первые два столбца - Customized TemplateFields). Но он не скрывает заголовки. Как я могу скрыть заголовки? BTW, myGridview.Columns обращается только к первым двум TemplateFields! – Fred

+1

@Fred видеть, что я обновляю свой код, он будет работать –

+0

Он все еще не работает. Обратите внимание, что я использую поля Auto Generated, которые не собираются в ** GridView1.Columns **. – Fred

Смежные вопросы