Как отобразить несколько значений в поле со списком из таблицы данных - PullRequest
2 голосов
/ 11 октября 2011

У меня есть таблица данных, имеющая 3 поля, из которых мне нужно объединить значения 2-го и 3-го полей и отобразить в поле со списком. Мой подход как под

DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Col1", typeof(string));
dt.Columns.Add("Col2", typeof(string));            

Enumerable.Range(1, 10).ToList().ForEach(i => dt.Rows.Add(i, string.Concat("Col1", i), string.Concat("Col2", i)));

comboBox1.DataSource = dt;
comboBox1.DisplayMember = string.Format("{0} : {1}","Col1","Col2");

Но я получаю вывод как System.Data.DataRowView ...

Даже я не могу изменить его с уровня хранимой процедуры. Однако я могу сделать это, используя сущностный подход, выставив некоторые свойства, но это будет огромным изменением в настоящее время. Есть ли какой-нибудь механизм, с помощью которого я могу использовать datatable в качестве источника и выполнить работу.

Спасибо

Ответы [ 6 ]

6 голосов
/ 11 октября 2011

Я сделал это как под

DataTable dt = new DataTable();
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Col1", typeof(string));
            dt.Columns.Add("Col2", typeof(string));
            dt.Columns.Add("ConcatenatedField", typeof(string), "Col1 + ' : ' +Col2"); 

            Enumerable.Range(1, 10).ToList().ForEach(i => dt.Rows.Add(i, string.Concat("Col1", i), string.Concat("Col2", i)));

            comboBox1.DataSource = dt;
            comboBox1.DisplayMember = "ConcatenatedField";
3 голосов
/ 11 октября 2011

Попробуйте это ..

  DataTable dt = new DataTable();
  foreach (DataRow dr in dt.Rows)
  {
      comboBox1.Items.Add(dr["Col1"].ToString() + dr["Col2"].ToString());
  }
1 голос
/ 04 декабря 2013
        DataTable dt = ds.Tables[0];
        dt.Columns.Add("NewColumn", typeof(string));            

        foreach (DataRow dr in dt.Rows)
        {
            dr["NewColmun"] = dr["Column1"].ToString() + " " + dr["Co"].ToString();
        }
        Combo.DataSource = dt;
        Combo.DisplayMember = "NewColumn";
        Combo.ValueMember = "ValueField";
0 голосов
/ 06 июля 2016

Используйте событие Combobox Format, например:

private void cmbDirectoryType_Format(object sender, System.Windows.Forms.ListControlConvertEventArgs e)
{
  if (e.DesiredType == typeof(string))
  {
    string str1 = ((Datarow)e.ListItem)("Col1").ToString();
    string str2 = ((Datarow)e.ListItem)("Col2").ToString();
    e.Value = str1  + " " + str2;
  }
}
0 голосов
/ 21 июня 2015

Также вы можете просто использовать SQL View и записать в него ваши комбинированные поля.

Create View yourView as    
Select Id, "Col1 + ' : ' +Col2" as bindField from yourTable;

и в коде:

var yourList = DB.yourView;
if (yourList.Count() > 0)
   {
    comboBox1.DataSource = yourList ;
    comboBox1.DisplayMember = "bindField ";
    comboBox1.ValueMember = "id";
    comboBox1.SelectedItem = "";
   }
0 голосов
/ 11 октября 2011

Привязать комбинированный список к DataView вместо DataTable .Вы получите значение вместо System.Data.DataRowView.У меня это работает.

DataTable dt = new DataTable()
....
DataView dv = new DataView();
dv = new DataView(dt,,,DataViewRowState.CurrentRows);
comboBox1.ItemsSource = dv;
comboBox1.DisplayMemberPath = "YourColumnName";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...