2012-01-19 3 views
1

Я пытаюсь реплицировать привязку в моей разметке с чем-то программным. Кажется, я вынужден использовать набор данных для привязки вместо SqlDataSource, как показано в моей разметке. Кроме того, при использовании набора данных я неожиданно теряю пейджинг, сортировку и т. Д., И получаю ошибки, которые мне нужно обрабатывать вручную. Они обрабатывались автоматически до ??Связывание GridView с программным обеспечением 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. Итак, как я могу реплицировать эту разметку и автоматически получать все сортировки и подкачки? Если мне нужно использовать набор данных, почему разметка не требуется? Но даже с набором данных он, похоже, не обрабатывает пейджинг и сортировку автоматически, как я уже сказал.

Спасибо! Levi

+0

Не понимают набор данных, вы не используете набор данных. DataSet позволяет сортировать и подкачки. Это datareader, который не позволяет эти вещи. DataReader является однонаправленным. Используйте SqlDataSource, который по умолчанию использует DataSet или следуйте инструкциям в ответе 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

Смежные вопросы