簡體   English   中英

WinForms - 創建和填充具有未知列數的列表的 DataGridView

[英]WinForms - Creating and populating a DataGridView with a List of unknown number of columns

大家好

我真的不知道我是否能夠解釋自己,但這里我們 go:

我制作了一個 winforms 應用程序,可以捕獲不同商店中相同產品的價格。 代碼已經以可以添加更多商店的方式進行了優化。

產品 class 是這樣的:

    public enum EnumMercado { Extra = 1, Dia = 8, Carrefour = 9, BIG = 10, Pao = 11 };
    public class Produto
    {
        public EnumMercado Mercado { get; set; } 
        public string IDProduto { get; set; }
        public string NomeProduto { get; set; }
        public bool Disponivel { get; set; }
        public decimal? Preco_de { get; set; }
        public decimal Preco_por { get; set; }
        public Bitmap ProductImage { get; set; }
        public bool Erro_Captura { get; set; }
        public String ErrorMessage { get; set; }
        public Produto()
        {
            Erro_Captura = false;
            ErrorMessage = string.Empty;
        }
    }

這是我用來填充單個產品搜索的 class:

    public class PesquisaGeral
    {
        public PRODUTOS Produto { get; set; }
        public List<Produto> Cotacoes { get; set; }
        public PesquisaGeral()
        {
            Cotacoes = new List<Produto>();
        }
    }

PRODUTOS 是一個實體 class(SQL 上的產品 ID 和 SQL 中的產品名稱)
Cotacoes 是 Produto 的列表(對於該產品鏈接的每個商店)

要獲得完整的產品 x 價格,我有一份 PesquisaGeral 清單

現在問題開始了

在我的 DataGridView 中,我想以這種方式填充:

標題:
[產品]、[店鋪名稱 1]、[店鋪名稱 2]、[店鋪名稱 3]....[數量]
價值觀:
[產品1] [2.66] [2.94] [1.98].....[可編輯文本框]

我已經使用 DataTable 完成了這項工作,根據商店的數量以及產品名稱和數量動態創建列。
沒關系”

無論使用 DataTable,有沒有辦法做到這一點? 是否可以動態創建一個列表來計算商店的數量並以水平方式創建命名對象的數量(可能是匿名的)?

我想要完成的是這樣的:

請記住:公共枚舉 EnumMercado { Extra = 1, Dia = 8, Carrefour = 9, BIG = 10, Pao = 11 };

var a = getmyCotacoes();
如果我將鼠標指向正在運行的響應,我希望能夠看到每個事物將顯示為的“事物列表”(可能是匿名列表):
產品:“產品 1”
額外:2.1
直徑:2.15
家樂福:3.7
大:2.1
寶:2.25
數量:0

今天我有這些商店,但這會增加,我不想每次添加商店時都更改方法。

順便說一句,對不起我的英語,我是巴西人。

thx in adv

拉斐爾

您關於不想使用 DataTable 的評論沒有意義; 可以對數據表/數據行進行子類化以創建自定義 class,就像您使用建議的列表解決方案一樣,因此您可以從自定義 class 中獲得數據表的所有功能以及您想要的任何功能。 Visual Studio 甚至有一個用於創建自定義數據表和數據行的內置設備,以便可以構建強類型數據訪問層(通常用於 db,但不是必須的)

關於必須加入原始搜索結果的評論也沒有意義; 數據表不是您的數據庫表,它可以包含比您的數據庫更少或更多的列。 例如,您的 select 可能是SELECT ID as ProductId, Nome, Preco FROM products WHERE Nome LIKE 'Jamon%'所以,三列,並且您的數據表可能有列ProductId, Nome, Quantidade, Preco, PrecoTotal 5可以有一個"[Preco] * [Quantidade]"的表達式,所以它會自動計算。 數量列不是查詢得到的,所以用戶填寫。總數只在數量填寫時計算。

我認為當涉及到是否使用數據表的問題時,更多的是你沒有正確使用它們或完全理解它們是如何工作的; 我確定他們可以解決您的問題,但我們只需要確定實際問題


您的實際問題似乎是“我如何擁有可變數量的商店”-如果您將商店保存在枚舉(MercadoEnum)中,那將非常困難,因為枚舉已編譯到程序中。 要添加新商店,您必須發布新程序。 相反,您的商店應該是數據庫中的一張表,就像您的產品一樣。 您應該有另一個表將商店與產品聯系起來,並且特定產品的價格將存儲在此表中,因為即使每個商店都可能出售牛奶,它們都以不同的價格出售。 當您查詢您的船舶和價格時,您基本上會得到一個相同產品的產品列表,以及一堆不同的價格,但關鍵是您會以行的形式返回價格- 如果 5 家商店銷售一種產品,您會得到 5 行。 如果兩家商店銷售一種產品,您將獲得兩排。 你是說你想要這些- 我們通常稱之為 pivot,我們將可變數量的行轉換為可變數量的列。 這樣做時要小心,因為它並不總是明智的。 列通常被認為是事物的屬性,並且事物通常不會具有無限數量的屬性 - 對它們進行建模會使它們更難使用

在這種情況下,它仍然是可能的; 您在每家商店都有一個價格列,並且您在數據庫或代碼中執行 pivot,可能是通過使用我想要的產品作為鍵的數據表,並在每次遇到時添加一個新列你不知道的店。 您最終會得到每個產品一行,每個商店都有一列價格。 如果您有多種產品,那么如果不是每個商店都銷售每種產品,那么您可能會有很多空白


請注意,當我說商店時,我的意思是“全國連鎖商店”——我在 mercado 列表中認出了家樂福,他們有很多地點,甚至每個分店都可能以不同的方式銷售一些產品。 也許甚至產品鏈接也應該在分店級別(城鎮中的建築物)而不是商店組級別完成,以允許不同的地點以不同的價格存儲不同的產品


您的第一個問題不是“數據表不能做”,而是數據建模問題; 你還沒有為你的程序建立合適的數據建模

暫無
暫無

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

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