假设我们为网格生成了这个链接到sql的数据集:
var query = from c in customers
orderby c.FirstName
select c;
Grid1.DataSet = query;
Grid1.DataBind();
生成此数据集后,我们需要以编程方式将“Vince Vaughn”添加到此数据集中(目标是向此linq-to-sql数据集添加一行,以便从数据库中获取值,以及1行以编程方式添加,都出现在网格中。
如何使用C#以编程方式完成此操作? (即以编程方式为Vince Vaughn添加一行到数据集中)
CUSTOMERS TABLE
ID FirstName LastName
1 John Jones
2 Sally Smith
环境:C#.NET 4.0
提前谢谢。
答案 0 :(得分:4)
如果您的意思是实际将行添加到后端存储中,并且假设ID
是标识列并且您的模型配置正确,则可以执行此操作。
using (var context = new ...)
{
context.customers.Add(
new Customer { FirstName = "Vince", LastName = "Vaughn" });
context.SubmitChanges();
}
如果你只是希望Vince出现在你可以做的列表中
var query = customers.Concat(new Customer[]
{
new Customer
{
ID = customers.Max(c => c.ID) + 1,
FirstName = "Vince",
LastName = "Vaughn"
}
}).OrderBy(c => c.FirstName);
这会将Vince添加到列表中而不会将他实际添加到存储中。
如果您只想将结果或结果“欺骗”到数据库的集合中,您可以使用一组兼容的匿名类型进行连接,就像这样......
var queryWithVince = query.Select(r = new
{
FirstName = r.FirstName,
LastName = r.LastName
})
.Concat( new []
{
new { FirstName = "Vince", LastName = "Vaughn" }
}
.OrderBy(p => p.FirstName);
如果其成员具有相同的属性名称和类型,则两个匿名类型是兼容的。如果query
的结果是其他非匿名类型,则需要确保linq处理能够将这些结果与您的匿名添加相结合。
答案 1 :(得分:0)
如果Grid1.DataSet
类型为IEnumerable<T>
且不属于DataSet类型,则没有多少选项,例如
再次从数据库中重新查询所有数据并将其重新分配给控件
cach List<T>
中的第一个查询数据,查询后只有“新”数据形成数据库并将其添加到绑定列表中。
答案 2 :(得分:0)
我自己从未尝试过,但这可能有用。您可以使用DataTable
作为存储库add the row manually,然后将其用作GridView
的数据源。
您可以使用此方法将Linq.DataContext
转换为DataTable
:
public DataTable ToDataTable(System.Data.Linq.DataContext ctx, object query)
{
if (query == null)
{
throw new ArgumentNullException("query");
}
IDbCommand cmd = ctx.GetCommand(query as IQueryable);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = (SqlCommand)cmd;
DataTable dt = new DataTable("sd");
try
{
cmd.Connection.Open();
adapter.FillSchema(dt, SchemaType.Source);
adapter.Fill(dt);
}
finally
{
cmd.Connection.Close();
}
return dt;
}
http://www.thejackol.com/2009/06/02/get-linq-to-sql-results-into-a-datatable/
答案 3 :(得分:0)
customers.Add(new Customer {FirstName = "Vaughn" LastName="Vince"});
you can also add a new datarow to your dataset
DataRow row = ds.Table["customer"].NewRow();
row["FirstName"] = "Vince";
row["LastName"] = "VMDFJM";