簡體   English   中英

在EntityFramework中將RadGridView與存儲過程的結果綁定

[英]Binding RadGridView with stored procedure's result in EntityFramework

我已將存儲過程的結果(在Entity Framework中)存儲在IList ,然后將網格與此IList綁定。 當此結果為null時,網格沒有任何列,但是我需要在網格中顯示這些列。 有什么辦法解決這個問題?

這是我的代碼:

IList list = new ArrayList();

try
{
    var context = new SabzNegar01Entities1();

    list = (from p in context.tbl_ReturnSalesFactor_D
            let add = (p.MainNum * p.Fee)
            let pureAdd = ((p.MainNum * p.Fee) - (p.MainNum * p.Discount)) + ((p.Tax + p.Charges) * p.MainNum)
            let taxChange = (p.Tax + p.Charges) * p.MainNum
            let discount = p.Discount * p.MainNum
            where p.DocNo == inDocNo
            select new { p.Row, p.StockCode,  p.tbl_Stock.PDescription, p.Fee, p.MainNum, add, taxChange, discount, pureAdd }).ToList();
}
catch (Exception ex)
{
    PMessageBox.Show(ex.Message, "Error in Reading  ReturnSalesFactor_Details Data");
}

和綁定:

radGridView_Product.DataSource = list ;

我會這樣做:

  • 定義一個與您從存儲過程中獲取的數據相匹配的C#類(例如SalesInfo或您要調用的任何數據)

  • 然后將您的IList定義為List<SalesInfo>不要再使用List<SalesInfo> ArrayList !)

  • 當您調用存儲過程但沒有返回任何值時,只需在返回的列表中添加一個虛擬SalesInfo條目即可,例如, no data found描述作為no data found ,其他均為空/0.0

這樣,您的方法將始終返回至少一個元素,並且由於該元素在那里,GridView知道它是列以及如何調用它們

更新:

首先定義一個類,以容納要在gridview中顯示的所有那些屬性:

// just a data container to hold the information - call it whatever you like!
// also: with the datatypes, I am just *GUESSING* because you didn't exactly tell us
// what those values are - adapt as needed !
public class SalesInfo
{
    public int Row { get; set; }
    public string StockCode { get; set; }
    public string Description { get; set; }
    public decimal Fee { get; set; }
    public decimal MainNum { get; set; }
    public decimal Add { get; set; }
    public decimal TaxChange { get; set; }
    public decimal Discount { get; set; }
    public decimal PureAdd { get; set; }
}

接下來,定義一個從存儲過程中獲取數據的方法-如果未返回數據,則添加一個虛擬條目:

// Define a method to return an IList of that data container class defined above
public IList<SalesInfo> GetSalesInfo()
{
    // please, as of .NET 2.0 - use the List<T> and stop using ArrayList!
    IList<SalesInfo> list = new List<SalesInfo>();

    try
    {
        // put your context usage into using()..... blocks to ensure proper disposal
        using (var context = new SabzNegar01Entities1())
        {
             // fetch the data, turn it into SalesInfo records
             list = (from p in context.tbl_ReturnSalesFactor_D
                     where p.DocNo == inDocNo
                     select new SalesInfo
                            {
                                Row = p.Row,
                                StockCode = p.StockCode,
                                Description = p.tbl_Stock.PDescription,
                                Fee = p.Fee,
                                MainNum = p.MainNum,
                                Add = p.MainNum*p.Fee,
                                PureAdd = ((p.MainNum*p.Fee) - (p.MainNum*p.Discount)) + ((p.Tax + p.Charges)*p.MainNum),
                                Discount = p.Discount*p.MainNum,
                                TaxChange = (p.Tax + p.Charges)*p.MainNum
                            }).ToList();
        }

        // if you get back no data -> add a dummy entry
        if (list.Count <= 0)
        {
             list.Add(new SalesInfo { Description = "(no data found)" });
        }
    }
    catch (Exception ex)
    {
        PMessageBox.Show(ex.Message, "Error in Reading  ReturnSalesFactor_Details Data");
    }

    // return the resulting list
    return list;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM