【问题标题】:Grid Load With Specific,Conditional Content具有特定条件内容的网格加载
【发布时间】:2013-03-21 06:44:03
【问题描述】:

我有以下数据库表>>

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

【问题讨论】:

    标签: c# .net sql winforms linq


    【解决方案1】:

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

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

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

    【讨论】:

    • 它给了我例外,“指定的演员表无效”
    • @PakkPuneriPorag,那么某处的类型转换无效。选择内部很可能有问题,即您将列转换为 CLR 类型的方式。您正在使用的列的数据库中的数据类型是什么?
    • 我用我使用过的数据类型编辑了表格。请看一下。
    • 好的。我明白,因为我试图将其显示为“买入”和“卖出”,并且数据类型是浮动的。我将其更改为 nvarchar(50) 并将其设置为 并且它有效。谢谢。
    【解决方案2】:

    您需要使用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2014-12-14
      • 2022-07-19
      相关资源
      最近更新 更多