2015-11-17 2 views
-1

Я не могу найти, где проблема, когда я помещаю цикл while в качестве комментария, который он работает, после цикла, который мы не можем читать с sqldatareader больше? списокbox2 еще пустой!почему listbox2 все еще пуст?

public partial class exTest : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     string connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; 
     SqlConnection con = new SqlConnection(connectionString); 
     string sql = "select employeeid,firstname,lastname from employees"; 
     SqlCommand cmd = new SqlCommand(sql, con); 

     con.Open(); 
     SqlDataReader reader = cmd.ExecuteReader(); 
     string item; 
     ListBox1.Items.Clear(); 
     while (reader.Read()) 
     { 
      item =reader.GetString(1) + reader.GetString(2); 
      ListBox1.Items.Add(item); 
     } 
     ListBox2.DataSource = reader; 
     ListBox2.DataValueField = "employeeId"; 
     ListBox2.DataTextField = "firstname"; 
     ListBox2.DataBind(); 
     reader.Close(); 
     con.Close(); 
    } 
} 
+1

Добавление элементов из Reader в список вместо установки источника данных для чтения. Я думаю, проблема заключается в том, что «читатель» является итератором, и вы уже повторили его один раз, поэтому к тому времени, когда вы установите источник для читателя, у него нет никаких элементов. –

+0

'ListBox2.DisplayMember =" firstname "; ListBox2.ValueMember = "lastname"; 'try this .. также как сотрудник мог когда-либо использоваться, когда он не является частью вашего исходного запроса Select ' ListBox2.DataSource = reader; 'должен быть установлен последним – MethodMan

+0

emloyeeid является частью запроса в строке sql, я все еще смущен –

ответ

0

Вы не можете использовать reader снова. Из MSDN Doc

Предоставляет способ чтения однонаправленного потока строк из базы данных SQL Server.

Вы можете читать по одной строке за раз, но после следующей строки вы не можете вернуться к строке.

То, что вы должны сделать, вы должны создать list объекта (например, employee object), который содержит employeeId, firstname, lastname. Заполните список и назначьте его в качестве источника для list2 или чего-то подобного.

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