2013-03-22 52 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

相關問題