在代码中创建的DataSet不绑定到ListView

时间:2011-03-29 17:50:41

标签: wpf listview dataset binding

我有一个带有ListView的WPF用户控件,它基于传递给它的DataSet创建:

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,这就是问题的起点:

如果我传入一个通过调用数据库创建的数据集,列表视图会显示所有数据,但如果我传入我在代码中创建的DataSet,则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);

我不知道这两个数据集之间有什么区别阻止我对它进行数据绑定吗?

此外,用户控件在WinForms应用程序中被用作ElementHost(不确定这是否有所不同)

1 个答案:

答案 0 :(得分:0)

您的代码说:

DisplayMemberBinding = new Binding(item.ColumnName)

binding constructor采用字符串参数,根据MSDN,“绑定”的初始Path,并且数据类型为System.Windows.PropertyPath。我想,因为系统试图在你的类中找到一个具有相同名称的属性,并且你的字符串(item.ColumnName)在开始时有空格,它会遇到问题(属性不能以空格开头)。

建议您在表格的列名中取消正在执行的填充。在GridView的标题中应用任何填充/边距。