我正在使用Winforms,并用datagridview
值填充我的SQL database
。这些值是运行时期间来自其他形式的用户定义值。我将继续编译这些值,因此,我使用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();
}
答案 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