繁体   English   中英

控制用户对表数据的编辑,从SQL Server数据库中读入

[英]Control User Editing of Table Data, Read in From SQL Server Database

当前,我有一个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 ,有没有办法为每一行指定可能的数据。 IE而不是允许用户键入“黄色”,而是将红色,黄色和蓝色作为“下拉”选项?

要将更改提交到数据库,必须首先指定适配器的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();
  //      } 
}

不过,这可能可以通过更简单的方式完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM