2013-03-22 55 views
1

目前我有一个C#应用程序正在从我的SQL Server数据库的表中读取数据。控制用户编辑表数据,从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.而不是让用户输入“黄色”,将红色,黄色和蓝色作为“下拉”选项?

回答

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/system.data.sqlclient.sqldataadapter.insertcommand(v=vs.90).aspx

http://msdn.microsoft.com/en-us/library/ms254937(v=vs.90).aspx

此外,您还可以使用DataGridViewComboBoxColumn(当心你的颜色列中的空值的,不过,它不处理空值)

// 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(); 
    //  } 
} 

它可能能够以更简单的方式来完成,虽然。

+0

看起来不错,谢谢! – William 2013-03-23 10:05:17

相关问题