绑定绑定列表的DataGridView显示空白行

时间:2014-01-22 23:17:49

标签: c# sql data-binding datagridview sql-server-2012

我在SQL Server 2012中存储了数据库中的表,并通过此表迭代并在绑定列表中添加新对象。然后将此列表设置为DataGridView的数据源。

据我所知,DataGridView应该创建列并用数据填充行,但是当我运行构建时,我只看到空行。它们的计数与表中的行数相匹配,我也使用断点进行调试,因此我确定我的数据源确实填充了数据,但我无法将这些空行排除在外。

这是我用来创建数据集和填充绑定列表的方法

public void selectCars()
{
    string connString = @"Data Source=POHJOLA\SQLEXPRESS;Initial Catalog=BlueCars;Integrated Security=True";

    using (SqlConnection connection = new SqlConnection(connString))
    {
        connection.Open();
        string query = "SELECT * FROM Car ORDER BY CarID ASC";
        SqlCommand command = new SqlCommand(query, connection);

        using (SqlDataAdapter adapter = new SqlDataAdapter(command))
        using (DataSet result = new DataSet())
        {
            adapter.Fill(result);

            foreach (DataRow row in result.Tables[0].Rows)
            {
                carsList.Add(new Car(Convert.ToInt32(row[0]), row[1].ToString(), row[2].ToString(), row[3].ToString(), Convert.ToDecimal(row[4]),Convert.ToInt32(row[5]),row[6].ToString(),row[7].ToString() ));
            }
        }
    }
} 

这是我的初始化

public managerCarForm()
{
    InitializeComponent();
    selectCars();
    carsGrid.DataSource = carsList;
}

另外我应该补充一点,我在设计器中手动创建了列,并将datanameproperty设置为汽车类的参数

我这里没有任何异常或错误..

非常感谢!

3 个答案:

答案 0 :(得分:0)

                foreach (DataRow row in result.Tables[0].Rows)
                    {
                        carsList.Add(new Car(Convert.ToInt32(row[0]), row[1].ToString(), row[2].ToString(), row[3].ToString(), Convert.ToDecimal(row[4]),Convert.ToInt32(row[5]),row[6].ToString(),row[7].ToString() ));
                    }

请在foreach循环后应用断点检查您的carList,以验证它是否包含至少一个数据行。并检查您的查询。

如果您的应用程序是ASP.NET 尝试修改您的代码如下..

public managerCarForm()
{
    InitializeComponent();
    selectCars();
    carsGrid.DataSource = carsList;
    carsGrid.Databind();

}

答案 1 :(得分:0)

通常在设计时手动添加列时会发生这种情况。 或者您有AutoGenerateColumns = false;

如果您使用AutoGenerateColumns = true;,则会/应该自动生成列。

要解决此问题: 右键单击表格->编辑列。

转到属性:DataPropertyName

将其设置为您要绑定的变量名(本例中为表列名)。 (您说过已经完成了,但是这里的值应该与列表中的值完全匹配。我创建了一个DTO类,并通过循环填充了自己的List并设置名称以匹配该属性。 DTO。这应该为您解决。)

enter image description here

答案 2 :(得分:0)

我在VB中遇到了完全相同的问题。

我发现解决方案是这样的:

(我只是用VB编写我的代码,您可以翻译它。)

在设置网格DataSource之前,您应该Clear将网格移出。

carsGrid.DataSource = Nothing
carsGrid.Rows.Clear()
carsGrid.Columns.Clear()

然后照常设置网格DataSource。就我而言:

carsGrid.DataSource = GetEmptyObject._Get()

希望有帮助。