我的SQL Server数据库中有2个表:城市和国家/地区。当然,城市与国家有关系。
使用Visual Studio 2012我为这些表生成了DataSet,DataTables,TableAdapters:
我想在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
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)