我正试图用程序化的东西复制我的标记中的绑定。 似乎我被迫使用数据集来绑定而不是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 。 那么如何复制此标记并自动获取所有排序和分页? 如果我必须使用数据集,为什么标记不需要? 但是,即使使用数据集,它似乎也不像我说的那样自动处理分页和排序。
谢谢! 列维
答案 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