2012-02-23 2 views
0

В мои окна образуют у меня есть два выпадающий и одно текстовое поле, когда jobecode выбран из cmbjobecode она будет загружать cmbquotationcode с соответствующими предложениями и заполняет текстовое поле txtamount с количеством выбранной цитатыЗаливка текстовое поле из DataTable

все это штраф за исключением того, что я не могу получить текстовое поле заполняется с количеством кто может помочь в сортировке ошибка

private void cmbjobcode_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      comboQuotationboxload(); 
     } 

public void comboQuotationboxload() 
     { 

      OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); 
      oleDbConnection1.Open(); 

      OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("Select quotationpk ,quotationcode , amount from quotationmastertable where jobpk = " + cmbjobcode.SelectedValue + "", oleDbConnection1); 



      OleDbDataReader reader = oleDbCommand1.ExecuteReader(); 

      DataTable dt = new DataTable(); 
      dt.Columns.Add("quotationpk", typeof(int)); 
      dt.Columns.Add("quotationcode", typeof(string)); 
      dt.Columns.Add("amount", typeof(int)); 
      dt.Load(reader); 
      cmbQuotationcode.ValueMember = "quotationpk"; 
      cmbQuotationcode.DisplayMember = "quotationcode"; 
      cmbQuotationcode.DataSource = dt.DefaultView; 
      txtamount.text= "amount"; 


      oleDbConnection1.Close(); 

     } 
+0

sreenath Я приклеил пример кода ниже для вас. OleDbDataReader может дать некоторые потрясающие результаты при правильном использовании .. если вам нужна помощь, пожалуйста, не стесняйтесь связаться – MethodMan

ответ

1

создать DT в области видимости класса

DataTable дт = новый DataTable();

/// Добавление столбцов в таблице в Form_Load()

dt.Columns.Add("quotationpk", typeof(int)); 
    dt.Columns.Add("quotationcode", typeof(string)); 
    dt.Columns.Add("amount", typeof(int)); 

// Тогда же заполнить операции

private void cmbjobcode_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      comboQuotationboxload(); 
     } 

public void comboQuotationboxload() 
     { 

      OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); 
      oleDbConnection1.Open(); 

      OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("Select quotationpk ,quotationcode , amount from quotationmastertable where jobpk = " + cmbjobcode.SelectedValue + "", oleDbConnection1); 



      OleDbDataReader reader = oleDbCommand1.ExecuteReader(); 

      dt.Load(reader); 
      cmbQuotationcode.ValueMember = "quotationpk"; 
      cmbQuotationcode.DisplayMember = "quotationcode"; 
      cmbQuotationcode.DataSource = dt.DefaultView; 



      oleDbConnection1.Close(); 

     } 

// фильтрации данных и отображения в текстовом поле

private void cmbQuotationcode_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      DataView dvDataTable = new DataView(dt); 
dvDataTable.RowFilter = "quotationpk ='" + cmbQuotationcode.SelectedValue "'"; 
if(dvDataTable.Count > 0) 
{ 
txtamount.Text= Convert.ToString(dvDataTable["amount"]); 
} 
else 
{ 
txtamount.Text = "0"; 
} 
     } 
1

вы пробовали получать на table.Rows?

 DataTable dt = new DataTable(); 
     DataRow row = table.Rows[0]; 
     dt.Columns.Add("quotationpk", typeof(int)); 
     dt.Columns.Add("quotationcode", typeof(string)); 
     dt.Columns.Add("amount", typeof(int)); 
//then you could assign the textbox like this 
txtamount.text= (string)row["amount"]; 

Что-то, как это должно привести вас к правильному ответу также вы всегда ожидали получить только 1 количество ..? если нет, то вам нужно обернуть этот код в цикле ..

* Лично я хотел бы использовать OleDbDataReader он будет читать колонки и поля вместо того, чтобы добавить поля, как вы ..

вот пример того, как можно использовать OleDbDataReader у меня есть метод, который я написал в GetNames из базы данных, например

public void comboQuotationboxload() 
{ 
    OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); 
    oleDbConnection1.Open(); 

    OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("Select quotationpk ,quotationcode , amount from quotationmastertable where jobpk = " + cmbjobcode.SelectedValue + "", oleDbConnection1); 

    OleDbDataReader reader = oleDbCommand1.ExecuteReader(); 
    reader.Read(); 
    cmbQuotationcode.ValueMember = "quotationpk"; 
    cmbQuotationcode.DisplayMember = "quotationcode"; 
    cmbQuotationcode.DataSource = reader; 
    txtamount.text = reader["amount"].ToString(); 
    oleDbConnection1.Close(); 
} 
+1

спасибо, что вы решили эту идею –

0

вы не должны использовать DataTable.

Предполагая, что есть только одна строка, возвращаемая вы можете сделать это:

public void comboQuotationboxload() 
{ 
    OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); 
    oleDbConnection1.Open(); 
    OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("Select quotationpk ,quotationcode , amount from quotationmastertable where jobpk = " + cmbjobcode.SelectedValue + "", oleDbConnection1); 
    OleDbDataReader reader = oleDbCommand1.ExecuteReader(); 

    if (!reader.Read()) 
     return; 

    cmbQuotationcode.ValueMember = "quotationpk"; 
    cmbQuotationcode.DisplayMember = "quotationcode"; 
    cmbQuotationcode.DataSource = reader; 
    txtamount.text = reader["amount"].ToString(); 

    oleDbConnection1.Close(); 
} 
Смежные вопросы