2012-01-19 67 views
1

我試圖用編程方式在我的標記中複製綁定。 看來我不得不使用數據集來綁定而不是我的標記中顯示的SqlDataSource。 此外,當使用數據集時,我突然失去了分頁,排序等功能,並且出現了我需要手動處理的錯誤。 他們之前自動處理?以編程方式將GridView綁定到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(); 
} 

這ofcourse引發錯誤的數據源的不是:

<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> 

我像這樣的東西取代它正確的類型,但這正是標記所做的。 我唯一能想到的就是使用DataSource而不是DataSourceID。 那麼如何複製這個標記並自動獲得所有的排序和分頁? 如果我必須使用數據集,爲什麼標記不需要? 但是,即使對於數據集,它似乎也不像我說的那樣自動處理分頁和排序。

謝謝! Levi

+0

不要誤會數據集,你不使用的數據集。 DataSet允許排序和分頁。這是datareader,不允許這些東西。 DataReader是單向的。可以使用默認使用DataSet的SqlDataSource,也可以按照Shyju的答案中的說明來建議您使用數據集。 – Mubarek

回答

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

+0

謝謝,我會試試這個。重複的變量項目在剪切和粘貼時很奇怪。那麼爲什麼在標記中它能夠將gridview數據源直接分配給sqldataadapter?我在之前的努力中嘗試使用數據集而不是數據表...也許這就是爲什麼排序等等不是默認處理的原因。 再次感謝 – KingOfHypocrites

+1

當我使用datatable時,它似乎不自動支持分頁等。當我嘗試進入下一頁時,出現以下錯誤: GridView'GridView1'激發了未處理的事件PageIndexChanging。 這是令人困惑的,因爲它是在我通過標記進行綁定時自動處理的。有任何想法嗎? – KingOfHypocrites

相關問題