DataGridView与数据库的连接

时间:2013-12-03 09:10:41

标签: c# .net sql-server datagridview

我经常需要将DataGridView与数据库连接。我一直在努力使用什么 - 我应该自己使用手动输入代码,还是应该使用某种内置机制,如插入/更新/删除/选择数据集。

使用内置代码我遇到的问题是,如果出现异常,我不知道如何在自动生成的代码中捕获它们?当我使用内置机制与数据库连接时,幕后产生了很多代码,我认为将代码与生成的代码合并是不明智的。

如果我手动输入代码,我可以完全控制所有内容 - 但是,我必须为每个特定的DataGridView执行此操作。

我总是使用相同的原则:对于insert / update / delete / select我在sql server数据库中使用存储过程。我从不在我的应用程序中使用sql查询。我只是不喜欢它们,我认为代码对它们来说太乱了,而且还有可能进行sql注入。

我成功地使用手动输入的代码 - 但每次我必须构建一些应用程序时,我会问自己是否还有另一种方法可以做到这一点?也许更短的方式或可以在另一个应用程序中重用的东西?

1 个答案:

答案 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;