【问题标题】:Datagrid view in Windows Form C#Windows 窗体 C# 中的 Datagridview
【发布时间】:2015-10-12 12:37:31
【问题描述】:

您好,我在 C# windows 窗体中使用 Datagridview,在数据网格视图中我使用数据网格链接列,示例代码在这里

  DataGridViewLinkColumn Editlink = new DataGridViewLinkColumn();
            Editlink.UseColumnTextForLinkValue = true;
            Editlink.HeaderText = "Edit";
            Editlink.DataPropertyName = "lnkColumn";
            Editlink.LinkBehavior = LinkBehavior.SystemDefault;
            Editlink.Text = "Edit";
            gvJobs.Columns.Add(Editlink);

它给了我输出

很好,但是当我重新加载网格时,它不会通过将数据源设为 null 来删除现有的编辑列。示例代码和输出在这里。

 gvJobs.DataSource = null;
            var jobs = (from v in General.ent.Jobs
                        where (v.MRNumber == (string)txtMrNumber.Text)
                        select new
                        {
                            MRNumber = v.MRNumber,
                            NumberOfDocuments = v.noofdocuments,
                            PageNumbers = v.PageNumbers,
                            JobStatus = v.job_status,
                            ScannerType = v.scanner_type,
                            DocumentType = v.Documenttype.document_name,
                            CreatedDate = v.received_date

                        }).ToList();
            gvJobs.DataSource = jobs;
            DataGridViewLinkColumn Editlink = new DataGridViewLinkColumn();
            Editlink.UseColumnTextForLinkValue = true;
            Editlink.HeaderText = "Edit";
            Editlink.DataPropertyName = "lnkColumn";
            Editlink.LinkBehavior = LinkBehavior.SystemDefault;
            Editlink.Text = "Edit";
            gvJobs.Columns.Add(Editlink);

并输出

我想在重新加载网格后输出图像 1。

【问题讨论】:

  • 自动数据列生成会将生成的列添加到末尾。您应该在重置数据源之前删除添加的链接列,然后重新添加。
  • gvJobs.DataSource = null; 之后添加gvJobs.Columns.Clear(); 行。有关解释,请参阅我上面链接的问题..
  • 添加列一次就足够了。您现在在加载数据时添加它。这当然会一遍又一遍地添加Edit 列。我建议您在表单的构造函数中添加该列,然后进行数据绑定。我还建议您根本不要使用自动生成的列。

标签: c# winforms datagridview datagrid


【解决方案1】:

您要么必须在重新加载网格时删除列,要么在重新加载时避免将列添加到网格中。

你可以使用

gvJobs.Columns.Remove()

为了删除编辑列

for (int j=0;j<gvJobs.Columns.Count ;j++)
{
    if (gvJobs.Columns[j].HeaderText == "Edit")
    {    
         DataGridViewLinkColumn Editlink = new DataGridViewLinkColumn();
         Editlink.UseColumnTextForLinkValue = true;
         Editlink.HeaderText = "Edit";
         Editlink.DataPropertyName = "lnkColumn";
         Editlink.LinkBehavior = LinkBehavior.SystemDefault;
         Editlink.Text = "Edit";
         gvJobs.Columns.Add(Editlink);
     }


 }

希望对你有所帮助。

【讨论】:

    【解决方案2】:
    gvJobs.Columns.Clear();
    

    为我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多