我在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设置为汽车类的参数
我这里没有任何异常或错误..
非常感谢!
答案 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。这应该为您解决。)
答案 2 :(得分:0)
我在VB中遇到了完全相同的问题。
我发现解决方案是这样的:
(我只是用VB编写我的代码,您可以翻译它。)
在设置网格DataSource
之前,您应该Clear
将网格移出。
carsGrid.DataSource = Nothing
carsGrid.Rows.Clear()
carsGrid.Columns.Clear()
然后照常设置网格DataSource
。就我而言:
carsGrid.DataSource = GetEmptyObject._Get()
希望有帮助。