我经常需要将DataGridView与数据库连接。我一直在努力使用什么 - 我应该自己使用手动输入代码,还是应该使用某种内置机制,如插入/更新/删除/选择数据集。
使用内置代码我遇到的问题是,如果出现异常,我不知道如何在自动生成的代码中捕获它们?当我使用内置机制与数据库连接时,幕后产生了很多代码,我认为将代码与生成的代码合并是不明智的。
如果我手动输入代码,我可以完全控制所有内容 - 但是,我必须为每个特定的DataGridView执行此操作。
我总是使用相同的原则:对于insert / update / delete / select我在sql server数据库中使用存储过程。我从不在我的应用程序中使用sql查询。我只是不喜欢它们,我认为代码对它们来说太乱了,而且还有可能进行sql注入。
我成功地使用手动输入的代码 - 但每次我必须构建一些应用程序时,我会问自己是否还有另一种方法可以做到这一点?也许更短的方式或可以在另一个应用程序中重用的东西?
答案 0 :(得分:1)
是的,您可以从DataGridView派生自己的类,比如说DerivedDataGridView
我在一段时间后做了类似的项目,我总是使用该控件来填充dataGridView
public DataTable AddGridRow<T>(IEnumerable<T> rowData, params String[] columnNames)
{
HashSet<String> columnsHashSet = new HashSet<String>(columnNames);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
foreach (T item in rowData)
{
foreach (PropertyDescriptor prop in properties)
{
DataRow newRow = _dataGridTable.NewRow();
foreach (DataColumn column in _dataGridTable.Columns)
{
if (columnsHashSet.Contains(prop.Name))
{
newRow[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
break;
}
}
}
_dataGridTable.Rows.Add(newRow); // _dataGridTable is existing DataTable
}
这是创建自定义DataTable的函数,然后您可以将其指定为数据源。您的数据可能来自IEnumerable&amp;您只需要提供列名称
现在从Datatable填充时,只需将新创建的Datatable分配为数据源
var newTable = _dataGridTable.DefaultView.ToTable(false, columnNames); //columnNames is string[]
DerivedDataGridView.DataSource = newTable;