0
我正在创建一个数据网格并将其绑定到数据源,其中一列需要以无法用SQL查询完成的方式生成数据。将虚拟数据网格列添加到压缩框架?
是否有可能创建一个只是空白的虚拟列,我可以重写OnPaint函数以确保它绘制我想要的正确数据?我尝试添加一个没有映射名称的列,但是不会渲染。
我正在创建一个数据网格并将其绑定到数据源,其中一列需要以无法用SQL查询完成的方式生成数据。将虚拟数据网格列添加到压缩框架?
是否有可能创建一个只是空白的虚拟列,我可以重写OnPaint函数以确保它绘制我想要的正确数据?我尝试添加一个没有映射名称的列,但是不会渲染。
就像约瑟夫在评论中说的那样,这只是一个添加列的问题。
这个例子会更好,如果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;
}
我想补充一点,提供了数据源,包括额外的列层。数据源可以看作是一个集合。收集可以填充来自不同来源的数据。由于CF上的数据网格不支持就地编辑,因此编写单向(只读)集合的图层应该很容易。 – josef 2013-03-13 05:26:11
例如,使用数据表,用数据库的数据填充该表,并为计算的数据添加一列。然后使用该数据表作为DataSource的DataSource。 – josef 2013-03-13 05:32:01