При связывании ListBox
источник данных к DataTable
каждый элемент внутри ListBox является DataRowView
, не простая строка. В ListBox вы видите строку, отображаемую, поскольку вы устанавливаете свойство DisplayMember
списка ListBox с именем столбца в этом DataRowView.
Итак, взятие текущего SelectedItem
не возвращает строку, но DataRowView и вызов ToString()
для DataRowView возвращает полное квалифицированное имя класса (System.Data.DataRowView).
Вам нужно что-то вроде этого
private void btnrgt_Click(object sender, EventArgs e)
{
DataRowView x = listBox1.SelectedItem as DataRowView;
if (x != null)
{
listBox2.Items.Add(x["NameOfTheColumnDisplayed"].ToString());
txttestno.Text = listBox2.Items.Count.ToString();
}
}
EDIT
Это не ясно, что является источником ошибки, указанной в свой комментарий ниже, однако вы можете попробовать, чтобы избежать добавления элемента из первого ListBox ко второму, если этот элемент существует во второй ListBox с кодом, как это
private void btnrgt_Click(object sender, EventArgs e)
{
DataRowView x = listBox1.SelectedItem as DataRowView;
if (x != null)
{
string source = x"NameOfTheColumnDisplayed".ToString();
if(!listbox2.Items.Cast<string>().Any(x => x == source))
{
listbox2.Items.Add(source);
txttestno.Text = listBox2.Items.Count.ToString();
}
}
}
это решение работает, если ваш второй ListBox действительно населенная добавляя простые строки в свою коллекцию Items.
Он по-прежнему показывает System.data.datarowview во втором списке –