目前我有一个C#应用程序,它从我的SQL Server数据库中的表中读取数据。
这是出于最终用户目的和管理,我希望他们能够编辑该数据并将其提交回数据库。
private void fillDataGrid()
{
string connectionString = "Server=; Database=; User Id=; Password=;";
DataTable Table = new DataTable("TestTable");
using (SqlConnection _con = new SqlConnection(connectionString))
{
string queryStatement = "SELECT * FROM dbo.table ORDER BY id ASC";
using (SqlCommand _cmd = new SqlCommand(queryStatement, _con))
{
SqlDataAdapter _dap = new SqlDataAdapter(_cmd);
_con.Open();
_dap.Fill(Table);
_con.Close();
}
}
dataGridView1.DataSource = Table;
}
如何将通过应用程序所做的更改再次提交回服务器?
另外,假设我有一个名为Colour
的列,有没有办法为每一行指定可能的数据。 I.E.而不是允许用户键入“黄色”,红色,黄色和蓝色作为“下拉”选项?
答案 0 :(得分:2)
要提交对数据库的更改,您必须首先指定适配器的InsertCommand,UpdateCommand和DeleteCommand。
可能会有帮助:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/ms254937(v=vs.90).aspx
此外,您可以使用DataGridViewComboBoxColumn(请注意Color列中的空值,但它不能很好地处理空值)
// choose from existng:
var data = (from a in Table.AsEnumerable()
select new ValueHolder
{
Name = a.Field<string>("Colour")
}).Distinct().OrderBy(p => p.Name).ToList();
// your own
var data = new List<ValueHolder>();
data.Add(new ValueHolder("Red"));
data.Add(new ValueHolder("Yellow"));
//..................
var column = new DataGridViewComboBoxColumn();
column.DataSource = data;
column.ValueMember = "Name";
column.DisplayMember = "Name";
dataGridView1.Columns.Add(column);
// --------------------------------------------- ---------------
class ValueHolder
{
public string Name{get;set;}
public ValueHolder(string name)
{
this.Name = name;
}
// this part may not be necessary without nulls:
//public override bool Equals(object obj)
// {
// ValueHolder other = obj as ValueHolder;
// if (other.Name.Equals(this.Name)) return true;
// return false;
// }
// public override int GetHashCode()
// {
// return Name == null ? 0 : Name.GetHashCode();
// }
}
但是,它可能以更简单的方式完成。