2012-09-14 37 views
1

我在UpdatePanel中有GridView。在某些情况下,我必须在此GridView中显示不同的列,因此我需要更改我的aspx中指定的BoundFields动态改变GridView中的BoundField

如何更改BoundFields以使GridView填充为不同的查询和不同的字段?

ASPX

<cc1:GridView ID="grdImoveis" CssClass="StyleGrid" Width="100%" runat="server" ShowHeader="false" 
      AutoGenerateColumns="False" DataSourceID="dsGrid" BorderWidth="0px" GridLines="None" 
      AllowPaging="True" EnableModelValidation="True" > 
      <AlternatingRowStyle BackColor="White" CssClass="EstiloDalinhaAlternativaGrid" HorizontalAlign="Center" /> 
      <RowStyle CssClass="EstiloDalinhaGrid" HorizontalAlign="Center" /> 
      <Columns> 
       <asp:BoundField HeaderText="Nome" DataField="NomeCompleto" /> 
       <asp:BoundField HeaderText="Cargo" DataField="DescricaoCargo1" /> 
       <asp:BoundField HeaderText="Data Cadastro" DataField="DataHora" /> 
       <asp:TemplateField ControlStyle-CssClass="acoes_lista_imovel" HeaderText="Curso"> 
        <ItemTemplate> 
         <div class="acoes_lista_imovel"> 
          <%# montaIcones(Eval("Usuario_Id").ToString())%> 
         </div> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </cc1:GridView> 

后面的代码

protected void btnSelecionarData_OnClick(object sender, EventArgs e) 
    {    
     string select = string.Empty; 
     select += "SELECT San_Credenciada.Apelido, San_Usuario.NomeCompleto, San_Usuario.Usuario_Id, San_Usuario.DescricaoCargo1, " 
      + "CONVERT(varchar, San_Usuario.DataHora, 103) AS DataHora, San_UsuarioCurso.Cv, San_UsuarioCurso.Institucional, " 
      + "San_UsuarioCurso.Copon, San_UsuarioCurso.ManualCaptacaoESistema, San_UsuarioCurso.PosturaProfissional, San_UsuarioCurso.Certificado " 
      + "FROM San_Usuario " 
      + "JOIN San_Credenciada " 
      + "ON San_Usuario.Credenciada_Id = San_Credenciada.Credenciada_Id " 
      + "JOIN San_UsuarioCurso " 
      + "ON San_Usuario.Usuario_Id = San_UsuarioCurso.Usuario_Id " 
      + "WHERE San_Usuario.Provisorio = 1 " 
      + "AND San_Usuario.Excluido = 0 " 
      + "AND San_UsuarioCurso.DataCurso = '" + this.DtBusca.Value.ToString() +"' " 
      + "GROUP BY San_Credenciada.Apelido, San_Usuario.NomeCompleto, San_Usuario.Usuario_Id, " 
      + "San_Usuario.DescricaoCargo1, San_Usuario.DataHora, San_UsuarioCurso.Cv, San_UsuarioCurso.Institucional, " 
      + "San_UsuarioCurso.Copon, San_UsuarioCurso.ManualCaptacaoESistema, San_UsuarioCurso.PosturaProfissional, San_UsuarioCurso.Certificado " 
      + "ORDER BY San_Usuario.DataHora ASC "; 

     dsGrid.ConnectionString = c.Con; 
     dsGrid.SelectCommand = select; 
     dsGrid.Dispose(); 

回答

2

如果我正确理解你的查询,你想改变列。这样做的一个简单的解决方案是,​​在decleratoin 网格视图网格看起来应该像

<asp:GridView ID="gv" runat="server" AutoGenrateColumns="True" /> 

// Now in your code behind just specify its DataSource property it will fill up with your desired columns. 
// Your query should contain only those columns which you want to show 
+0

但是,这将生成我的查询中存在的所有列,并在特定的公司我把图片 –

+0

是的,否则你必须使用Grid的RowDataBound事件来改变它。你想改变什么?列标题?或者什么 –

+0

例如,'SELECT Id,Name FROM User',如果我把这个查询填入一个带有'AutoGenerateColumn = true'的'GridView',会给我一个Id和Name列。我需要在此列的所有行中放置另一列,并显示特定图像。 –

1

你可以把GridView和启用 “的AutoGenerateColumns =真正的” 和你喜欢填表格视图每一种情况下。

+0

但是,这将产生存在的所有列在我的查询 –

+0

你可以创建有界的字段编程(使用BoundField的类) –

+0

在这里看到:http://www.codeproject.com/Articles/13461/how-to-create-columns-dynamically-in-a-grid-view –

0

您可以使用创建的ImageField编程验证码:

ImageField img = new ImageField(); 
     img.HeaderText = "Pictuer"; 
     img.DataImageUrlField ="Pic"; 
     img.DataImageUrlFormatString = "images\\{0}"; 
     GridView1.AutoGenerateColumns = false; 
     GridView1.Columns.Add(img); 
相关问题