如何使用来自多个tableadapter查询的行正确填充DataGridView?

时间:2011-01-07 05:33:25

标签: c# datagridview tableadapter

我正在进行即席查询以获取一组ID,每个ID都转到表适配器的查询,填充行。

但是,除了在表适配器上使用ClearBeforeFill属性之外,我无法找出任何其他方法来清除。

所有这些都相当于有效的代码,但我觉得这有点像黑客。

有谁知道这样做的正确/更好的方法? (注意:我知道内联SQL并不理想)

    var db = new Data.PRDataDataContext();
    verifiedLineItemsTableAdapter.ClearBeforeFill = true;
    bool flag = true;
    foreach (var affid in db.ExecuteQuery<int>(
        @"
        SELECT Item.affid           
        FROM   dbo.Item INNER JOIN
               dbo.Affiliate ON dbo.Item.affid = dbo.Affiliate.affid
        WHERE  Affiliate.name={0}
        UNION
        SELECT affid
        FROM   dbo.Publisher
        WHERE  name={0}"
        , name))
    {
        Console.WriteLine("got " + affid);
        verifiedLineItemsTableAdapter.FillByAffId(
            publisherReportDataSet1.VerifiedLineItems, affid);
        if (flag)
        {
            verifiedLineItemsTableAdapter.ClearBeforeFill = false;
            flag = false;
        }
    }

1 个答案:

答案 0 :(得分:0)

我会把它分成两个独立的函数,然后加入

与此相似

List<int> getItemAffid(string Name) {....//your code here to return a list}

List<int> getPublisherAffid(string Name) {....//your code here to return a list} 

然后加入他们

var SearchItemAffid = from a in getItemAffid(<your var>) select a;
var SearchedPublisherAffid = from a in getPublisherAffid(<your var>) select a;

var Combined = SearchedPublisherAffid.Union(SearchItemAffid);

编辑:然后您可以将其绑定到网格

DataGrid.Datasource = Combined