DataSet создан в коде, не привязанном к ListView - PullRequest
1 голос
/ 29 марта 2011

У меня есть пользовательский элемент управления WPF с ListView, который создается на основе переданного ему набора данных:

public void PopulateList(DataSet ds) {
        listView.View = CreateGridViewColumns(ds.Tables[0]);
        listData.DataContext = ds.Tables[0];
}

private GridView CreateGridViewColumns(DataTable dt) {
        // Create the GridView
        var gv = new GridView {AllowsColumnReorder = true};

        // Create the GridView Columns
        foreach (DataColumn item in dt.Columns) {
            var gvc = new GridViewColumn
                          {
                              DisplayMemberBinding = new Binding(item.ColumnName),
                              Header = item.ColumnName,
                              Width = Double.NaN
                          };
            gv.Columns.Add(gvc);
        }

        return gv;
    }

Теперь я создаю пользовательский элемент управления в коде и вызываю его PopulateList с соответствующим набором данных, и именно здесь начинаются проблемы:

Если я передаю набор данных, который был создан из обращения к базе данных, представление списка показывает все данные, но если я передаю набор данных, который я создал в коде, ListView показывает столбцы, но не показывает данные

//This is a function that hides the DB call return type is DataSet    
var dsPatientSmokingStatusHistory = DataRepository.PatientSmokingStatusProvider.GetHistory(PatientId);
        //radGridViewPatientSmokingStatus.DataSource = dsPatientSmokingStatusHistory.Tables[0];

        var dt = new DataTable();
        string c1 = "Date".PadLeft(23).PadRight(23);
        string c2 = "Status".PadLeft(20).PadRight(50);
        dt.Columns.Add(c1);
        dt.Columns.Add(c2);
        int i = 0;
        foreach (DataRow row in dsPatientSmokingStatusHistory.Tables[0].Rows) {
            var dataRow = dt.NewRow();
            dataRow[c1] = ((DateTime)row["Date"]).ToString("MM/dd/yyyy");
            dataRow[c2] = row["Status"].ToString();
            dt.Rows.Add(dataRow);
            dt.Rows[i].AcceptChanges();
            i++;
        }

        DataSet ds = new DataSet();
        dt.TableName = "Table";
        ds.Tables.Add(dt);
        ds.AcceptChanges();

        smokingStatusGrid.GridWidth = 455;
        smokingStatusGrid.GridHight = 97;
        //This line does not show data
        smokingStatusGrid.PopulateGrid(ds);
        //This line will show data
        smokingStatusGrid.PopulateGrid(dsPatientSmokingStatusHistory);

Есть ли разница между этими двумя наборами данных, о которой я не знаю, которая мешает мне привязать данные к ней?

Также пользовательский элемент управления используется в качестве ElementHost в приложении WinForms (не уверен, если это имеет значение)

1 Ответ

0 голосов
/ 29 марта 2011

Ваш код говорит:

DisplayMemberBinding = new Binding(item.ColumnName)

Этот конструктор связывания принимает строковый параметр, который согласно MSDN равен "Начальный Путь для привязки" и имеет тип данных System.Windows.PropertyPath.Я предполагаю, что поскольку система пытается найти свойство с тем же именем в вашем классе, а ваша строка (item.ColumnName) имеет пробелы в начале, она сталкивается с проблемой (свойства не могут начинаться с пробела).

Рекомендую вам снять заполнение, которое вы делаете в столбце имени вашей таблицы.Примените любые отступы / поля в заголовке вашего GridView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...