你的问题:
 // 将DataReader对象绑定到DataGrid控件
*********  问题在这  *************************************
   dgCust.DataSource=dr;
   dgCust.DataBind();
**********************************************************
这里需要的是DataSet;你要新建一个 SqlDataAdapter对象,然后调用它的Fill方法填充DataSet。dgCust 不用先声明的吗 ?
因为在你的页面里你不是已经定义了一个DataGrid控件dgCust嘛。

解决方案 »

  1.   

    1. you are using SqlDataReader as the data source for the datagrid, no need for a SqlDataAdapter2. dgCust is defined here:
    <datagrid id="dgCust" runat="server">
      

  2.   

    TO: yunhi(yunhi)    我没有定义呀 ? 所有的语句都在上面了 , 没有呀 。
      

  3.   

    dgCust并不是不要声明,应该是DataGrid控件的ID,如果没有这个ID,编译肯定会报错,不可能通过的
      

  4.   

    如果你的程序编译通过的话,你不可能没有定义的呀,那你的dgCust从哪里来?它又何来DataGrid类的DataSource属性和DataBind()方法?
      

  5.   

    dgCust是DataGird控件的ID,你应该还有代码没贴出来,控件ID在页面代码是不用声明的
      

  6.   

    全部的代码:<%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <html>
    <script language="C#" runat="server">
    public void Search_Click(Object sender, EventArgs E) 
    {    
       // 连接到本地计算机的eShops数据库
       SqlConnection cn=new SqlConnection("Data Source=localhost;" +
                    "Integrated Security=SSPI;Initial Catalog=eShops");
       // 构造SQL语句,该语句用于查询某个客户的订购情况
       String strSQL="select Orders.OrderId,ProductName,Qty,Price "+
             "from Customers,Orders,Products "+
             "where CustName=@CustName and Customers.CustId=Orders.CustId "+
             "and Orders.ProductId=Products.ProductId "+
             "order by Orders.Orderid";
       // 创建Command对象cm
       SqlCommand cm=new SqlCommand(strSQL,cn);
       // 添加一个参数
       cm.Parameters.Add(new SqlParameter("@CustName",SqlDbType.NVarChar,12));
       // 给参数赋值
       cm.Parameters["@CustName"].Value=CustName.Text;       
       // 打开连接
       cn.Open();
       // 执行ExecuteReader()方法
       SqlDataReader dr=cm.ExecuteReader();
       // 将DataReader对象绑定到DataGrid控件
       dgCust.DataSource=dr;
       dgCust.DataBind();
       // 关闭连接
       cn.Close();
    }
    </script>
    <body style="font: 10pt verdana">
    <form runat="server">
    客户名:
    <asp:TextBox id="CustName" runat="server" />
    <asp:RequiredFieldValidator id="RFV" 
           ControlTOValidate="CustName"
           Display="dynamic" runat="server">*
    </asp:RequiredFieldValidator>
    <asp:Button text="查询" OnClick="Search_Click" runat="server" />
    <br><br>
    <asp:DataGrid id="dgCust" runat="server"
          Width="700" BackColor="#ccccff" 
          BorderColor="black" ShowFooter="false" 
          CellPadding=3 CellSpacing="0"
          Font-Name="Verdana" Font-Size="8pt"
          HeaderStyle-BackColor="#aaaadd"
          AutoGenerateColumns="false"
          MaintainState="false">
      <Columns>
          <asp:BoundColumn HeaderText="订单号" DataField="OrderId" />
          <asp:BoundColumn HeaderText="产品名" DataField="ProductName" />
          <asp:BoundColumn HeaderText="数量" DataField="Qty" />
          <asp:BoundColumn HeaderText="单价(元)" DataField="Price" />
      </Columns>
    </asp:DataGrid>
    </form>
    </body>
    </html>
      

  7.   

    <asp:DataGrid id="dgCust" runat="server"///////////这里就定义了id="dgCust"了
      

  8.   

    <asp:DataGrid id="dgCust" runat="server"
    ......
    </asp:DataGrid>
    这段code不就是定义了一个ID号为dgCust的DataGrid控件嘛。
      

  9.   

    程序先执行<body></body>中的代码,后执行<script></script>