【问题标题】:How to remove additional row with mysql如何使用mysql删除额外的行
【发布时间】:2019-06-12 03:53:33
【问题描述】:

我正在使用 Winforms 并用 SQL database 值填充我的 datagridview。这些值是运行时不同形式的用户定义值。我将继续编译这些值,因此我使用visibleChanged 而不是load 来显示我的数据。

数据正在正确编译,但在加载第二组值之后,也会编译额外的空行(见图)。

如何删除这些额外的行?

下面是我如何将值从 database 加载到 datagridview 的代码:

public Testsql()
    {
        InitializeComponent();

        dataGridView1.ColumnCount = 2;
        dataGridView1.Columns[0].Width = 100;
        dataGridView1.Columns[1].Width = 100;
        dataGridView1.Columns[0].Name = "ID";
        dataGridView1.Columns[1].Name = "EXTERIOR";

        dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
        dataGridView1.AllowUserToAddRows = false;
    }

private void Testsql_VisibleChanged(object sender, EventArgs e)
    {
        SqlConnection sqlConnection = new SqlConnection();
        sqlConnection.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Savertb.mdf;Integrated Security=True";
        sqlConnection.Open();
        SqlCommand sqlCommand = new SqlCommand();
        sqlCommand.Connection = sqlConnection;
        sqlCommand.CommandText = "Select * from Rtbdata";

        SqlDataReader dataReader = sqlCommand.ExecuteReader();

            for (int i = 0; dataReader.Read(); i++)
            {
                dataGridView1.Rows.Add();
                dataGridView1.Rows[i].Cells["ID"].Value = dataReader["Id"].ToString();
                dataGridView1.Rows[i].Cells["EXTERIOR"].Value = dataReader["Exterior"].ToString();
            }

        sqlConnection.Close();
    }

【问题讨论】:

  • 您应该将数据网格视图绑定到数据表,并使用数据适配器清除并用更新的数据重新填充表
  • @Caius Jard 啊,太棒了。遵循您的建议后没有其他行。谢谢! :)

标签: c# mysql winforms datagridview


【解决方案1】:

我无法重现你的环境,但我认为下面应该可以工作

1) 将所有数据网格行复制到数据表对象

DataTable dt = new DataTable();
dt = ((DataView)DataGrid1.ItemsSource).ToTable();  

2) 然后删除 DataTable 中的空行(如果存在) How to remove empty rows from DataTable

3) 最后复制回所有数据表行并覆盖DataGrid1对象

dataGridView1.DataSource = dt;
dataGridView1.DataBind();

【讨论】:

  • 这是一种非常迂回的方式,违反了MVC原则! :)
【解决方案2】:

一直填一个新的数据表有点浪费,但是让代码更简单:

//sqlstr is your SELECT.. connatr isnthe connection string
var da = new MySqlDataAdapter(sqlStr, connStr);
var dt = new DataTable();
da.Fill(dt); //dataadapter will open and close conn for you
gridview.DataSource = dt;

【讨论】:

    【解决方案3】:

    如果您想删除表格中的空行,请使用:

    DELETE FROM Rtbdata WHERE [EXTERIOR] IS NULL AND [ID] IS NULL
    

    使用 AND 运算符不删除外部 OR id 包含一个值的行

    如果您只是不想向他们展示,请使用:

    SELECT * FROM Rtbdata WHERE [EXTERIOR] IS NOT NULL AND [ID] IS NOT NULL
    

    如果外部 OR id 包含一个值,则使用 AND 运算符显示行

    如果您不希望 EXTERIOR oder ID 为 NULL,则可以使用 OR

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 2010-10-23
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2021-10-01
      • 2022-01-14
      相关资源
      最近更新 更多