string strsql="select * from gain";
string keyid="gain_id";
sqlconn = new SqlConnection(connstr);
sqlcomd = new SqlCommand(strsql, sqlconn);
sqlconn.Open();
GridView.DataSource = sqlcomd.ExecuteReader(CommandBehavior.CloseConnection);
GridView.DataKeyNames = new string[] { keyid };
GridView.DataBind();
sqlconn.Close();
这样写的话会讲gain表中所有的数据项都显示在gridview中,但我现在只要求显示一部分,例如只显示gain_name,gain_num.该怎么样实现呢?不能够用
<asp:BoundField   datafield="gain_name" headertext="获取名称">
       <HeaderStyle width="90px"></HeaderStyle>
       <ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
因为gridview会绑定到不同的表,不能够写死了!该怎么办呢?

解决方案 »

  1.   

    补充一点,也不能够用select gain_name,gain_num from gain.因为我要讲主键gain_id读取出来,但有不能够讲主键显示在gridview中!
      

  2.   

    GRidview里设置,
    不要自动生成列,逐个添加所需列。
      

  3.   

    AutoGenerateColumns="False" 这个设置为false
    <Columns>
    <asp:BoundColumn DataField="tbid"  Visible="false" ItemStyle-Width="5%" ItemStyle-ForeColor="#000000" ItemStyle-BorderColor="#666666"  ItemStyle-Font-Bold="true" ItemStyle-BackColor="buttonface" SortExpression="tbid" HeaderText="流水号"> </asp:BoundColumn>
    <asp:BoundColumn DataField="JobNo"  ItemStyle-Width="25%" SortExpression="JobNo" ItemStyle-ForeColor="#333366"  ItemStyle-Font-Bold="true" HeaderText="流水号"> </asp:BoundColumn>
    <asp:BoundColumn DataField="JobType"  ItemStyle-Width="20%"  ItemStyle-ForeColor="#333366" SortExpression="JobType" HeaderText="货代提单号"> </asp:BoundColumn>
    <asp:BoundColumn DataField="BookingDate"  DataFormatString="{0:d}"  ItemStyle-Width="20%" ItemStyle-ForeColor="#333366" SortExpression="BookingDate" HeaderText="订舱日期"> </asp:BoundColumn>
    <asp:BoundColumn DataField="BookingDate"  DataFormatString="{0:d}"  ItemStyle-Width="20%" ItemStyle-ForeColor="#333366" SortExpression="BookingDate" HeaderText="处理日期"> </asp:BoundColumn>
    <asp:BoundColumn DataField="SpGroup"   ItemStyle-Width="10%" ItemStyle-ForeColor="#333366" SortExpression="SpGroup" HeaderText="区域"> </asp:BoundColumn>
    </columns>
    </asp:datagrid>
      

  4.   

    antiking(结构是值类型),谢谢!
    你这样实现我也知道!但是你这样实现的话gridview就只能够与一个数据库进行绑定,这不是我想要的结果!我现在要的效果是:当点击botton1时在gridview中显示botton1数据表中的内容,当点击botton2时在gridview中显示botton2数据表中的内容。同时要将每个表中的主键读取出来但不显示在gridview中!
      

  5.   

    我现在的思路AutoGenerateColumns="True" 这个设置为true.根据select语句中读取的字段显示在datagrid中,但是不能够将主键显示在gridview中。
    楼上zhoumins(zm) 说的不要自动生成列,逐个添加所需列,是指用antiking(结构是值类型)那样的方法增加吗?
    楼上cdsun() 说的列隐藏是不是指 Visible="false" ?
    如果是这样的话好象行不通的!
      

  6.   

    楼主,对于你说的点击一个按钮出现一个表内容,点击另外一个按钮出现另外一个表内容。我的方法是,在页面上建立两个SqlDataSource,用向导很简单的。
    然后在后台,按钮的click事件中,分别对SqlDataSource进行绑定。还有不显示某些列的方法是,创建GridView后,然后编辑列,出现对话框中不勾选自动生成列。
    将不显示的主键移除就可以了。
      

  7.   

    hblzg(心开风神) 的方法行的通吗?我先去试试看!
      

  8.   

    用不同的SqlDataSource绑定到同一个GridView是比较有效的方法。
      

  9.   

    因为使用databind好像能使数据刷新并重新显示,msdn中好像有类似的代码,大概是点一个grid中相应button后会在旁边的的一个grid中或加或减一行
      

  10.   

    建立两个SqlDataSource,然后绑定的话怎么将不显示的主键移除了?
    因为我要将两个SqlDataSource中涉及到的表中的主键都不显示!
      

  11.   

    试了一下,如果建立两个SqlDataSource的话可以绑定.但仍然解决不了不显示主键的问题!请问在onclick事件中对对sqldatasource进行绑定后怎么样解决不显示主键的问题呢?
      

  12.   

    谢谢各位的帮助,关心,支持!问题我自己已经解决了!
    在后台动态的加入列,用GridView.Columns.Add(),加入你想要加入的列就可以了!
    haojian(鸡急了也会飞) :你说的在编辑列里将主键列移除在我这里行不通的!