Заполнить текстовое поле из данных - PullRequest
0 голосов
/ 23 февраля 2012

В моей форме окна у меня есть два поля со списком и одно текстовое поле, когда код задания задан из cmbjobecode, он загрузит код cmbquotation с соответствующими предложениями и заполнит текстовое поле txtamount количеством выбранных предложений

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

 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();

        }

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

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

DataTable dt = new 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 голос
/ 23 февраля 2012

Вы пытались получить за столом. Ряды?

        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();
}
0 голосов
/ 23 февраля 2012

Вам не нужно использовать 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...