如何使用mysql删除其他行

时间:2019-06-12 03:53:33

标签: c# mysql winforms datagridview

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

数据正在正确编译,但是在继续加载第二组值之后,也正在编译其他空行(参见图像)。

enter image description here

如何删除这些额外的行?

以下是有关如何将值从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();
    }

3 个答案:

答案 0 :(得分:0)

我无法复制您的环境,但我认为下面的方法会起作用

1)将所有datagrid行复制到datatable对象

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

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

3)最后,复制回所有datatable行并覆盖DataGrid1对象

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

答案 1 :(得分:0)

一直在填充新的数据表会有些浪费,但这会使代码更简单:

//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;

答案 2 :(得分:0)

如果要删除表中的空行,请使用:

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产品ID为NULL,则可以使用OR