查询使用文本框编辑数据网格视图

时间:2015-08-04 08:24:07

标签: c# database datagridview

这是我目前的代码:

private void editButton2_Click(object sender, EventArgs e)
    {
        connection.Open();

        try
        {

            OleDbCommand command = new OleDbCommand();

            command.Connection = connection;

            string query = string.Format(
@"update Customer 
  set Title='{0}',
      [Name]='{1}',
      Member='{2}',
      Email='{3}',
      [Phone No]='{4}',
      [Facility]='{5}',
      [Unit Size]='{6}',
      [Start Date]='{7}',
      [Rent Duration]='{8}',
      [End Date]='{9}',
      [Storage Item]='{10}',
      [Air Condition]='{11}',
      [Total Monthly Cost]='{12}',
      [Total Rental Cost]='{13}' 
  {14}", 
 titleComboBox2.Text,
 nameTextBox2.Text,
 memberComboBox2.Text,
 emailTextBox2.Text,
 phoneNoTextBox2.Text,
 facilityComboBox2.Text,
 unitSizeComboBox2.Text,
 start_DTP2.Value.ToString("yyyy-MM-dd"),
 rentDurationTextBox2.Text,
 end_DTP2.Value.ToString("yyyy-MM-dd"),
 storageItemComboBox2.Text,
 airConComboBox2.Text,
 totalMonthlyCostTextBox2.Text,
 totalRentalCostTextBox2.Text, 
 "where TransactionNo=" + idTextBox.Text + "");

            command.CommandText = query;

            command.ExecuteNonQuery();
            MessageBox.Show("Data edited");


        }
        catch (Exception exception)
        {
            MessageBox.Show(exception.ToString());
        }
        connection.Close();
    }

以下是我希望程序运行的方式:

1)用户输入他/她想要编辑的数据的交易号到idTextBox

2)然后,用户可以选择他/她想要编辑的值。例如,如果他/她想要编辑客户的名称,他/她应该将新名称键入nameTextBox2并将其余部分留空

3)用户点击编辑按钮,数据应根据更新。旧名称应替换为用户输入的新名称。其余数据应保持不变。例如。客户的电子邮件应保持不变,而不是空白

但是我的程序要求我将值键入每个文本框和组合框以使其工作。为什么会这样?

1 个答案:

答案 0 :(得分:0)

根据textboxex的值生成查询。仅在值不为空时更新

StringBuilder query = New StringBuilder();
//Name
if (this.nameTextBox2.Text.Length > 0)
{
    query.AppendLine(", [Name]=@Name");
    command.Parameters.Add("@Name", OleDbType.VarChar).Value = this.nameTextBox2.Text;
}
//Email
if (this.emailTextBox2.Text.Length > 0)
{
    query.AppendLine(", Email=@Email");
    command.Parameters.Add("@Email", OleDbType.VarChar).Value = this.emailTextBox2.Text;
}
// ... 
// And other control in same way
// Then check if something updated
if(query.Length == 0)
    Return;
// Remove first "," character if updates exists
query.Remove(0,1);
query.Insert("UPDATE Customer SET ");
query.AppendLine("WHERE TransactionNo=@TranNo");
OleDbParameter tranno = New OleDbParameter("@TranNo", OleDbType.Integer);
tranno.Value = Int32.Parse(this.idTextBox.Text);
command.Parameters.Add(tranno);
// Run query
command.CommandText = query.ToString();
command.ExecuteNonQuery();

请记住使用Parameterized query,因为评论中提到了@Soner

另一种方法是在输入交易号后将当前数据加载到文本框 然后,您的查询将更新已更改的值并复制编辑后未更改的值

相关问题