【问题标题】:How to add a gridview to a C# winforms project with a list of objects as the datasource如何将 gridview 添加到 C# winforms 项目中,并将对象列表作为数据源
【发布时间】:2016-06-14 02:11:28
【问题描述】:

我正在 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; }
    }

我有一个这个类的列表。加载后,我想要一个填充此列表内容的网格视图。我在网上查看了一些解决方案,但没有一个对我有用。如果可以的话,请帮助我提供一些具体的说明。提前致谢。

我还没有让它为我工作。基于这里的两个答案是我到目前为止的代码:

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”应该做的是根据传递给表单的列表加载和填充数据网格视图。请帮助我知道我做错了什么。

【问题讨论】:

    标签: c# winforms list datagridview


    【解决方案1】:

    不完全确定我是否理解您的问题,如果您希望通过代码创建 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;
    

    【讨论】:

    • 查看我上面编辑过的原始问题,我想出了一些新代码,但它并没有像我希望的那样工作。
    • 那么现在的问题是什么?它是否抛出任何错误或不显示?如果您提供一些详细信息会有所帮助。
    • 显示form2时formgridview为空白,不显示任何数据,整个控件为空白。
    【解决方案2】:

    您可以使用以下代码,非常简单。加载表单时,它会设置 DataGridViews 数据源。

    步骤非常简单:

    • 创建 winform 应用程序并添加一个控件,DataGridView 并为其命名。在这个例子中,它被简单地命名为dataGridView1不过,这一步你需要自己解决
    • 确定DataSource 将如何设置DataGridView,在此示例中,它是在加载表单时设置的Form1_Load() 函数。您可以通过单击按钮来执行此操作。
    • 创建代码以创建List&lt;EDIFile&gt; 列表。在此示例中,GetDataGridViewData() 返回 List&lt;EDIFile&gt;。它基本上创建了 10 个虚拟 EDIFile 对象
    • 设置DataSourceDataGridView

    假设您有第一步的 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; }
        }
    }
    

    我的示例如下所示:

    【讨论】:

    • 查看我上面编辑过的原始问题,我想出了一些新代码,但它并没有像我希望的那样工作。
    【解决方案3】:

    在按钮单击事件的 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 2023-03-25
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多