以编程方式将GridView绑定到SqlDataSource

时间:2012-01-19 23:22:29

标签: c# asp.net sqldatasource

我正试图用程序化的东西复制我的标记中的绑定。 似乎我被迫使用数据集来绑定而不是SqlDataSource,如我的标记中所示。 此外,当使用数据集时,我突然失去分页,排序等,并获得我需要手动处理它们的错误。 它们之前是自动处理的?

所以这是我的标记:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" 
    CellPadding="4" DataSourceID="SqlDataSource1" ForeColor="#333333" 
    GridLines="None" AllowPaging="True" AllowSorting="True" Width="520px">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
    </Columns>
</asp:GridView>   
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>" 
    SelectCommand="CustOrdersOrders" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:Parameter Direction="ReturnValue" Name="RETURN_VALUE" Type="Int32" />
        <asp:ControlParameter ControlID="txtCustId" DefaultValue="AROUT" 
            Name="CustomerID" PropertyName="Text" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

我用以下内容替换它:

SqlDataAdapter adapter = new SqlDataAdapter();                
conn.Open();
using (SqlConnection conn = new SqlConnection(connStr))
{
    SqlDataAdapter adapter = new SqlDataAdapter();

    conn.Open();

    using (SqlCommand cmd = new SqlCommand("CustOrdersOrders", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("CustomerID", "AROUT");
        cmd.ExecuteScalar();
        adapter.SelectCommand = cmd;
    }

    GridView1.DataSource = adapter;                
    GridView1.DataBind();
}

这个问题引发了一个错误,即数据源的类型不正确,但这正是标记的作用。 我唯一能想到的是使用 DataSource 而不是 DataSourceID 。 那么如何复制此标记并自动获取所有排序和分页? 如果我必须使用数据集,为什么标记不需要? 但是,即使使用数据集,它似乎也不像我说的那样自动处理分页和排序。

谢谢! 列维

1 个答案:

答案 0 :(得分:2)

您无法将DataAdapter设置为DataSource属性值.SqlDataAdapter提供数据集与SQL数据库之间的通信。您必须使用数据适配器来填充DataTable / DataSet并将其用作DataSource。

您的代码还有其他一些问题

1)您在声明连接之前尝试打开连接。

2)使用相同的名称创建两次Sql数据适配器对象。

以下代码可以使用

using (SqlConnection conn = new SqlConnection(connStr))
{
    SqlDataAdapter adapter = new SqlDataAdapter();    
    conn.Open();
    DataTable dt = new DataTable();
    using (SqlCommand cmd = new SqlCommand("CustOrdersOrders", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("CustomerID", "AROUT");           
        adapter.SelectCommand = cmd;
        adapter.Fill(dt);
    }

    GridView1.DataSource = dt;                
    GridView1.DataBind();
}

http://www.dotnetperls.com/sqldataadapter

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspx