我是初学者,我希望可以改变下拉列表中的选项后,gridview显示不同表中的内容,如何实现?不同的表字段不同,BoundField写死的话肯定不行,不知道gridview中能否在后台里操作BoundField?
我现在希望可以像操作datatable那样给gridview添加行,可行吗?或者我的要求怎么才能实现呢?

解决方案 »

  1.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="student_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GDMSConnectionString %>"
                SelectCommand="SELECT * FROM [class]"></asp:SqlDataSource>
        
        </div>
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:GDMSConnectionString %>"
                SelectCommand="SELECT * FROM [student] WHERE ([stu_class] = @stu_class)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="DropDownList1" Name="stu_class" PropertyName="SelectedValue"
                        Type="String" />
                </SelectParameters>
            </asp:SqlDataSource>
            <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" AutoPostBack="True"
                DataSourceID="SqlDataSource1" DataTextField="class" DataValueField="class">
            </asp:DropDownList>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="stu_id"
                DataSourceID="SqlDataSource2">
                <Columns>
                    <asp:BoundField DataField="stu_id" HeaderText="stu_id" ReadOnly="True" SortExpression="stu_id" />
                    <asp:BoundField DataField="stu_name" HeaderText="stu_name" SortExpression="stu_name" />
                    <asp:BoundField DataField="stu_class" HeaderText="stu_class" SortExpression="stu_class" />
                    <asp:BoundField DataField="sex" HeaderText="sex" SortExpression="sex" />
                    <asp:BoundField DataField="imgurl" HeaderText="imgurl" SortExpression="imgurl" />
                </Columns>
            </asp:GridView>
        </form>
    </body>
    </html>
      

  2.   

    以Northwind数据库为例:假设在web.config里已经有了连接字符串配置,如:
    <connectionStrings>
    <add name="NorthwindConnectionString" connectionString="Data Source=.\sqlexpress;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/>
    </connectionStrings>前台(注意,这里的GridView必须是EnableViewState="false"):<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
                <asp:ListItem Value="Product表">Product表</asp:ListItem>
                <asp:ListItem Value="Suppliers表")>Suppliers表</asp:ListItem>
            </asp:DropDownList>
            <asp:GridView ID="GridView1" runat="server" EnableViewState="false">
            </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>
    后台:protected void Page_Load(object sender, EventArgs e)
    {
            for (int i = 0; i < GridView1.Columns.Count; i++)
                GridView1.Columns.RemoveAt(i);                if (DropDownList1.SelectedValue == "Product表")
            {
               
                BoundField productID = new BoundField();
                productID.DataField = "ProductID";
                productID.HeaderText = "Product ID";
                GridView1.Columns.Add(productID);            BoundField productName = new BoundField();
                productName.DataField = "ProductName";
                productName.HeaderText = "产品名称";
                GridView1.Columns.Add(productName);            SqlDataSource1.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
                SqlDataSource1.SelectCommand = "select ProductID, ProductName from Products";
                GridView1.DataSourceID = SqlDataSource1.ID;
                GridView1.AutoGenerateColumns = false;
            }
            else
            {
                BoundField supplierID = new BoundField();
                supplierID.DataField = "SupplierID";
                supplierID.HeaderText = "Supplier ID";
                GridView1.Columns.Add(supplierID);            BoundField companyName = new BoundField();
                companyName.DataField = "CompanyName";
                companyName.HeaderText = "公司名";
                GridView1.Columns.Add(companyName);
                SqlDataSource1.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
                SqlDataSource1.SelectCommand = "select SupplierID, CompanyName from Suppliers";
                GridView1.DataSourceID = SqlDataSource1.ID;
                GridView1.AutoGenerateColumns = false;        }
    }
      

  3.   

    通过GridView添加新行可以参考这里:Inserting a New Record from the GridView’s Footer
      

  4.   

    前台应该是这样。<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
                <asp:ListItem Value="Product表">Product表</asp:ListItem>
                <asp:ListItem Value="Suppliers表">Suppliers表</asp:ListItem>
            </asp:DropDownList>
            <asp:GridView ID="GridView1" runat="server" EnableViewState="false">
            </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>
      

  5.   

    非常感谢namhyuk ,我习惯用手写的数据源,下面是我实现的一个例子,把GridView1.AutoGenerateColumns = False加到Me.GridView1.DataBind()之前就可以控制只显示显示2个字段了。 If DropDownList1.Text = "05" Then            Dim apply_id As New BoundField()
                apply_id.DataField = "apply_id"
                apply_id.HeaderText = "身份证号码"
                GridView1.Columns.Add(apply_id)            Dim job As New BoundField()
                job.DataField = "scholor_name"
                job.HeaderText = "申请工作"
                GridView1.Columns.Add(job)
                Dim objDataSet As New DataSet
                Dim objCon As OleDbConnection
                Dim objDataAdapter As OleDbDataAdapter
                Dim strDbCon, strSQL As String            ' OLEDB提供者字串
                strDbCon = conStr
                ' 建立Connection对象
                objCon = New OleDbConnection(strDbCon)
                strSQL = "SELECT * FROM [financing].[dbo].[scholar_social] "
                ' 建立DataAdapter对象
                objDataAdapter = New OleDbDataAdapter(strSQL, objCon)
                ' 建立CommandBuilder对象产生DataAdapter的SQL命令
                Dim objCmdBuilder As OleDbCommandBuilder = _
                          New OleDbCommandBuilder(objDataAdapter)            ' 将取得的记录数据填入DataSet对象
                objDataAdapter.Fill(objDataSet, "S")            Me.GridView1.DataSource = objDataSet.Tables("S").DefaultView
                GridView1.AutoGenerateColumns = False
                Me.GridView1.DataBind()
            End If