簡體   English   中英

如何使用對象列表作為數據源向C#winforms項目添加gridview

[英]How to add a gridview to a C# winforms project with a list of objects as the datasource

我正在Visual Studio 2015社區中使用C#構建Winforms應用程序。 在這個項目中,我有一個這樣構建的類:

public class EDIFile
    {
        public string fullInFilePath { get; set; }
        public string fullOutFilePath { get; set; }
        public string InfileName { get; set; }
        public string OutfileName { get; set; }
        public string UniqueID { get; set; }
        public DateTime infileDateTime { get; set; }
        public DateTime outfileDateTime { get; set; }
        public TimeSpan timeDiff { get; set; }
    }

我有一個此類的清單。 加載后,我想要一個包含此列表內容的gridview。 我看了網上,找到了兩個解決方案,但沒有一個對我有用。 如果可以的話,請通過一些具體說明幫助我。 提前致謝。

我還沒有得到它為我工作。 基於這兩個答案,這里是我到目前為止的代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ProviderPayProject1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load_1(object sender, List<EDIFile> EDIFiles)
        {
            DataGridView dataGridView1 = new DataGridView();
            dataGridView1.AutoGenerateColumns = true;
            Controls.Add(dataGridView1);
            dataGridView1.DataSource = EDIFiles;
        }
    }
}

這是“ form1”中調用的“ form2”中的代碼。 所有“ form2”應該做的就是基於傳遞到表單的列表加載並填充datagridview。 請幫助我知道我在做什么錯。

不能完全確定我理解您的問題,如果您希望通過代碼創建DataGridView ,則可以這樣做。

List<EDIFile> data; // construct your data.
DataGridView grid = new DataGridView();
grid.AutoGenerateColumns = true;
this.Controls.Add(grid);

grid.DataSource = data;

其他選項,通過設計器添加DataGidView控件並設置DataSource

ex..
List<EDIFile> data; // construct your data.
dataGridView1.DataSource =data;

您可以使用以下代碼,它非常簡單。 加載表單后,它將設置DataGridViews數據源。

步驟非常簡單:

  • 創建winform應用程序,然后僅添加一個控件,一個DataGridView並將其命名。 在此示例中,其簡單命名為dataGridView1 不過,您需要自己弄清楚這一步
  • 確定如何設置DataGridView的DataSource ,在此示例中,是在窗體加載時設置的Form1_Load()函數。 您可以通過單擊按鈕來執行此操作。
  • 創建代碼以創建List<EDIFile>列表。 在此示例中, GetDataGridViewData()返回List<EDIFile> 它基本上會創建10個虛擬EDIFile對象
  • 設置DataGridView DataSource

假設您具有第一步的winform,則應該能夠將名稱空間WindowsFormsApplication1和Form類Form1更改為所需的名稱:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        // the list of EDFiles 
        public List<EDIFile> EDFiles { get; set; }
        public Form1()
        {
            InitializeComponent();
            Load += Form1_Load; // add Form Load eventhandler
        }
        /// <summary>
        /// Called when the form is loaded
        /// </summary>
        private void Form1_Load(object sender, EventArgs e)
        {
            // get dummy data
            EDFiles = GetDataGridViewData();
            // set datasource to the dummy data
            dataGridView1.DataSource = EDFiles;
        }
        /// <summary>
        /// Returns dummy data for the datagridview
        /// </summary>
        /// <returns></returns>
        private List<EDIFile> GetDataGridViewData()
        {
            // bascially just creates dummy data for the example,
            // you'll need to implement based on how you need it to be
            var newEDFiles = new List<EDIFile>();
            Random random = new Random();
            for (int i = 1; i <= 10; i++)
            {
                int randomNumber = random.Next(0, 100);
                var infileDateTime = DateTime.Now;
                var outfileDateTime = infileDateTime.AddDays(randomNumber);
                var edfile = new EDIFile()
                {
                    fullInFilePath = "fullInFilePath" + i,
                    fullOutFilePath = "fullOutFilePath" + i,
                    InfileName = "InfileName" + i,
                    OutfileName = "InfileName" + i,
                    UniqueID = "UniqueID" + i,
                    infileDateTime = infileDateTime,
                    outfileDateTime = outfileDateTime,
                    timeDiff = outfileDateTime- infileDateTime
                };
                newEDFiles.Add(edfile);
            }
            return newEDFiles;
        }
    }
    public class EDIFile
    {
        public string fullInFilePath { get; set; }
        public string fullOutFilePath { get; set; }
        public string InfileName { get; set; }
        public string OutfileName { get; set; }
        public string UniqueID { get; set; }
        public DateTime infileDateTime { get; set; }
        public DateTime outfileDateTime { get; set; }
        public TimeSpan timeDiff { get; set; }
    }
}

我的示例如下所示: 在此處輸入圖片說明

在按鈕單擊事件的Form1類中,您將需要以下內容:

var f2 = new Form2();
f2.ShowForm(GetDataGridViewData());

Form2類應如下所示:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public void ShowForm(List<EDIFile> EDIFiles)
    {
        DataGridView dataGridView1 = new DataGridView();
        dataGridView1.AutoGenerateColumns = true;
        Controls.Add(dataGridView1);
        dataGridView1.DataSource = EDIFiles;
        this.ShowDialog();
    }
}

暫無
暫無

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

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