0

我有以下数据库表>>

   (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 查询之外,还有其他方法可以得到这样的结果吗?

4

2 回答 2

0

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

不过,解决方案很简单 - 只需将您的结果数据集转换为实现这些接口之一的东西,例如只需调用ToList

.Select(d => new {...}).ToList();
于 2013-03-21T06:58:18.443 回答
0

您需要使用AsDataView()将查询转换回 DataView 。例如

.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();
于 2013-03-21T07:11:09.780 回答