【问题标题】:Add dummy datagrid columns to compact framework?将虚拟数据网格列添加到紧凑框架?
【发布时间】:2013-02-28 20:59:40
【问题描述】:

我正在创建一个数据网格并将其绑定到一个数据源,其中一个列需要以 sql 查询无法完成的方式生成数据。

是否可以创建一个空白的虚拟列,并且我可以覆盖 OnPaint 函数以确保它绘制我想要的正确数据?我尝试添加一个没有映射名称的列,但它不会呈现。

【问题讨论】:

  • 我会添加一个层来提供数据源,包括额外的列。数据源可以被视为一个集合。该集合可以填充来自不同来源的数据。由于 CF 上的数据网格不支持就地编辑,因此为这种单向(只读)集合编写层应该很容易。
  • 例如使用数据表,用数据库的数据填充它,并为计算数据添加一列。然后将该数据表用作数据网格的数据源。

标签: c# datagrid windows-mobile compact-framework


【解决方案1】:

就像 josef 在 cmets 中所说的那样,只需添加一列即可。

如果GetTableMethod 链接到您的数据层,这个例子会更好,但它应该明白这一点:

private const string sqlConnString = "Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;" +
  "User ID=myDomain\myUsername;Password=myPassword;";
DataGrid dataGrid1;

private void BindData() {
  var table = GetTableMethod("SELECT * FROM Employees;");
  var cInt = table.Columns.Add("My Integer", typeof(int));
  var cStr = table.Columns.Add("Hex View", typeof(string));
  var cBool = table.Columns.Add("Is Even", typeof(bool));
  var dDbl = table.Columns.Add("My Double", typeof(double));
  for (int i = 0; i < table.Rows.Count; i++) { // can't use a foreach here
    DataRow row = table.Rows[i];
    row[cInt] = i;
    row[cStr] = i.ToString("X"); // view in hexadecimal, just for fun
    row[cBool] = ((i % 2) == 0);
    row[dDbl] = (double)i / table.Rows.Count;
  }
  dataGrid1.DataSource = table;
}

private DataTable GetTableMethod(string sqlSelectText) {
  var table = new DataTable();
  using (var cmd = new System.Data.SqlClient.SqlCommand(sqlSelectText, new System.Data.SqlClient.SqlConnection(sqlConnString))) {
    try {
      cmd.Connection.Open();
      table.Load(cmd.ExecuteReader());
    } finally {
      cmd.Connection.Close();
    }
  }
  return table;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2010-10-25
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多