具有特定条件内容的网格加载

时间:2013-03-21 06:44:03

标签: c# .net sql winforms linq

我有以下数据库表>>

   (string)   (float)     (float)       (float)
    TradeNo | Buy_Sell | Trade_Qty | Market_Price

    205412     1           50            300   

    205487     2           30            350 

    208754     1           20            200

在此表中有专栏Buy_Sell。买= 1,卖= 2

当我绑定网格时,值显示为原样。

但是,我想在网格中将它们显示为>

TradeNo | Buy_Sell | Trade_Qty | Market_Price

205412     Buy           50            300   

205487     Sell          30            350 

205487     Buy           20            200 

我该怎么做?

我只是使用以下代码>

绑定网格
try
{
    con.Open();
    da = new SqlDataAdapter("select ..., 
                TradeNo, Buy_Sell, TradeQty, MarketPrice", con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    // gvTradeFile.DataSource = ds.Tables[0];
    gvTradeFile.DataSource = ds.Tables[0].AsEnumerable()
        .Select(d => new
        {
            TradeNo = d.Field<string>("TradeNo"),
            Buy_Sell = d.Field<float>("Buy_Sell") == 1 ? "Buy" : "Sell",
            TradeQty = d.Field<float>("TradeQty"),
            Market_Price = d.Field<float>("MarketPrice")
        });             
 }
 catch (Exception ex)
 {
     MessageBox.Show(ex.Message);
 }

这段代码没有给我任何例外,但也没有向我显示网格结果。

除了LINQ查询之外还有其他方法可以得到这样的结果吗?

2 个答案:

答案 0 :(得分:0)

Select方法返回IQueryable个结果。这不足以使数据绑定正常工作,因为DataSource属性等待IListIListSourceIBindingListIBindingListView的对象。

分辨率很简单 - 只需将结果数据集转换为实现其中一个交互的内容,例如只调用ToList

.Select(d => new {...}).ToList();

答案 1 :(得分:0)

您需要使用AsDataView()将查询转换回DataView。 e.g。

.Select(d => new
{
    TradeNo = d.Field<string>("TradeNo"),
    Buy_Sell = d.Field<float>("Buy_Sell") == 1 ? "Buy" : "Sell",
    TradeQty = d.Field<float>("TradeQty"),
    Market_Price = d.Field<float>("MarketPrice")
})
.AsDataView();