我正在创建一个数据网格并将其绑定到一个数据源,其中一个列需要以一种 sql 查询无法完成的方式生成数据。
是否可以创建一个空白的虚拟列,我可以覆盖 OnPaint 函数以确保它绘制我想要的正确数据?我尝试添加一个没有映射名称的列,但它不会呈现。
我正在创建一个数据网格并将其绑定到一个数据源,其中一个列需要以一种 sql 查询无法完成的方式生成数据。
是否可以创建一个空白的虚拟列,我可以覆盖 OnPaint 函数以确保它绘制我想要的正确数据?我尝试添加一个没有映射名称的列,但它不会呈现。
就像 josef 在评论中所说的那样,这只是添加一列的问题。
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;
}