Значение поля C # и отображение с использованием метода invoke - PullRequest
1 голос
/ 14 декабря 2011

Я использую Windows Forms , и у меня есть поле со списком со значениями:

AppleапельсиныПары

Мое текстовое поле содержит значения 1, 2 и 3,

яблоко = 1 и апельсины = 2 и пары = 3.

Это отношение находится в моей таблицена SQL, поля Account и Name.Как изменить значение текстового поля на = 2, если в поле со списком выбраны апельсины?

По сути, это ссылка на программу, над которой я работаю, в которой есть поле со списком учетных записей, в котором отображаются имена учетных записей.(удобный).Мне нужен номер идентификатора учетной записи, чтобы затем отображаться в текстовом поле.Из этого текстового поля я могу затем передать значение в мою хранимую процедуру, которая получит всю информацию об этой учетной записи.

Обновление

Приведенный выше текст устарел.См. Ниже!

Следует добавить, что мой код получает данные учетной записи и заполняет мое поле со списком.

Существует ли простой способ сделать это?Или для этого требуется объединение в C #, аналогичное объединению SQL в таблицах?

Или вообще без использования текстового поля, в основном моя комбинация будет иметь 2 поля оранжевого цвета, 2, но отображать только апельсины для пользователя, но мое другоеметод использует второе поле 2.

ОК, поэтому эта часть добавляет поле со списком в поле со списком.

{
    SqlCommand accountFill = new SqlCommand("SELECT name, acc FROM dbo.Customer", conn1);
    SqlDataReader readacc = accountFill.ExecuteReader();

    while (readacc.Read())
    {
        AddItem(readacc.GetString(0).ToString(), readacc, "name", "acc");
    }
    conn1.Close();
}

Добавление элемента - это метод вызова, используемый моей задачей.

private void AddItem(string value, Object dataSource, string name, string acc)
{
    if (accCollection.InvokeRequired)
    {
        accCollection.Invoke(new Action<string,Object,string,string>(AddItem), new Object[] { value });
    }
    else
    {
        //accCollection.Items.Add(value);
        accCollection.DataSource = dataSource;
        accCollection.DisplayMember = name;
        accCollection.ValueMember = acc;
    }
}

Комплексная привязка данных ОШИБКА принимает в качестве источника данных iilist или источник i.list в источнике данных.

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

Класс ComboBox имеет два свойства ValueMember и DisplayMember.Вам необходимо установить для свойства DisplayMember Имена вашей таблицы или данных, т.е. апельсин, яблоко и т. Д., И установить для свойства ValueMember их идентификаторы:

combobox1.Datasource = readacc;
combobox.DisplayMember = 'name';
combobox.ValueMember = 'acc';

Все, что вам нужно, это просто использовать два свойства SelectedValue для получения идентификатора или SelectedText для получения значения.Например, вы можете получить идентификатор выбранного элемента, используя ComboBox.SelectedIndexChanged Событие, подобное этому:

private void ComboBox1_SelectedIndexChanged(object sender, 
    System.EventArgs e)
{
    textbox2.text = int.parse(combobox1.SelectedValue.ToString());
}

, или вы можете получить выделенный текст, например:

textbox2.text = combobox1.SelectedText;
0 голосов
/ 14 декабря 2011
    DataTable dt = new DataTable("ListItem");
    dt.Columns.Add("Id", Type.GetType("System.Int32"));
    dt.Columns.Add("Name", Type.GetType("System.String"));

    dt.Rows.Add(new object[]{1,"apple"});
    dt.Rows.Add(new object[]{2,"oranges"});
    dt.Rows.Add(new object[]{3,"pairs"});

    comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember="Id";

    textBox1.DataBindings.Add("Text", dt, "Id");

или

    comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
    comboBox1.SelectedIndex = -1; //for initial step;

void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    textBox2.Text = comboBox1.SelectedValue.ToString();
}
...