从这个代码中,我试图只显示包含Station_From_Code
列中的"DBY"字段和Station_To_Column
中的"MAT"字段的数据行。然后将其打印到HTML页面上。这些字段肯定在数据表中,但当我运行这个命令时,表是空的。我不习惯在c#中使用数据表,所以为糟糕的编码道歉。
dynamic schedluedContent = JsonConvert.DeserializeObject(scheduledJson);
JArray items2 = new JArray();
foreach (JObject stops in schedluedContent.stops)
{
DataTable dt = new DataTable();
DataRow dr;
dr = dt.NewRow();
dr["From_Station_Code"] = stops["station_code"];
dr["To_Station_Code"] = stops["station_code"];
dt.Rows.Add(dr);
DataRow[] result = dt.Select("From_Station_Code = 'DBY' AND To_Station_Code = 'MAT'");
dt.Rows.Add(result);
GridViewTrainTimes.DataSource = dt;
GridViewTrainTimes.DataBind();
}
我已经很长时间没有看到这种风格的代码用于处理数据库表了!EntityFramework的出现改变了数据库的工作方式,并避免了在代码中使用SQL命令的不同风险。
如果你使用EF,你的代码将变成如下所示:
var rows = myDBContext.MyTable.Where(x=>x.From_Station_Code == "DBY" && x.To_Station_Code == "MAT");
GridViewTrainTimes.DataSource = rows;
您可以使用查找匹配行并添加新的数据表,它只包含您的匹配行数据,然后您可以将此dt绑定到gridview
DataTable dt = new Datatable(); // Lets this datatable have data;
Datatable dt2 = new Datatable(); // Copy all matching rows
foreach (DataRow dr in dt.Rows)
{
if (dr["From_Station_Code"].ToString() == "DBY" && dr["To_Station_Code"].ToString() == "MAT")
{
dt2.Rows.Add(dr);
}
}
GridViewTrainTimes.DataSource = dt;
GridViewTrainTimes.DataBind();