ADO.NET DataSet。如何显示相关表中的字段并插入记录?

时间:2014-02-08 10:11:36

标签: c# .net winforms datagridview ado.net

我的SQL Server数据库中有2个表:城市和国家/地区。当然,城市与国家有关系。

使用Visual Studio 2012我为这些表生成了DataSet,DataTables,TableAdapters: enter image description here

我想在DataGridViews中显示表格,而城市DGW应该有CountryName列。

所以我修改了City TableAdapter中的SelectCommand。

SELECT City.Id, City.CountryId, City.CityName, Country.CountryName
FROM City 
    INNER JOIN Country ON City.CountryId = Country.Id

enter image description here

private void LoadTables()
{
    tableadapterCountry.Fill(dbDataSet.Country);
    tableadapterCity.Fill(dbDataSet.City);
}

它有效,但我也希望能够在表格中添加记录。

对于Country table,我这样做了:

private void AddCountry(string countryName)
{
    dbDataSet.Country.AddCountryRow(countryName);
}

以下是我保存到数据库的方式:

private void SaveChanges()
{
    tableadapterCountry.Update(dbDataSet.Country);
    tableadapterCity.Update(dbDataSet.City);
}

但是在City表格中我有额外的字段CountryName。所以在dbDataset.City.AddCityRow(...)中我需要填写该字段。它感觉不对,我希望它能以某种方式自动发生。

我还试图通过dbDataset.City.NewRow()手动创建DataRow,用CityName,CountryId填充它并使用dbDataset.City.Rows.Add(dr)添加:

private void AddCity(int countryId, string cityName)
{
    var dr = dbDataSet.City.NewRow();
    dr["CountryId"] = countryId;
    dr["CityName"] = cityName;
    dbDataSet.City.Rows.Add(dr);
}

但是,即使在SaveChanges()之后,DGW中的CountyName字段仍然为空,只有当我再次从适配器重新启动app / fill表时它才会填充。

UPD: test project + db create sql script (VS 2012, SQL Server Express 2012)

0 个答案:

没有答案