Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表绑定到DataGridView,每次单击“保存”时不显示任何内容并清除对象_C#_Datagridview_Checkedlistbox - Fatal编程技术网

C# 将列表绑定到DataGridView,每次单击“保存”时不显示任何内容并清除对象

C# 将列表绑定到DataGridView,每次单击“保存”时不显示任何内容并清除对象,c#,datagridview,checkedlistbox,C#,Datagridview,Checkedlistbox,我正在尝试将类列表绑定到WinForms应用程序上的DataGridView。当前绑定代码不做任何事情。我已经调试通过它,源代码是正确的,包含正确的项目列表。但我在DataGridView中看不到行 如何在DataGridView上显示列表中的内容?目前,每次单击“保存”时,它都会清除我的类对象,但是我希望保留我在构造函数中输入的以前的值。如果已经存在一个国家/地区,我希望用户弹出框,说明他们是否希望重写此内容-这是否可能/我如何才能最好地实现此目标 CountryWithDates.cs c

我正在尝试将类列表绑定到WinForms应用程序上的DataGridView。当前绑定代码不做任何事情。我已经调试通过它,源代码是正确的,包含正确的项目列表。但我在DataGridView中看不到行

如何在DataGridView上显示列表中的内容?目前,每次单击“保存”时,它都会清除我的类对象,但是我希望保留我在构造函数中输入的以前的值。如果已经存在一个国家/地区,我希望用户弹出框,说明他们是否希望重写此内容-这是否可能/我如何才能最好地实现此目标

CountryWithDates.cs

 class CountryWithDates
{
    public string country;
    public DateTime firstDate;
    public DateTime furtherDate;
    public DateTime rolldownDate;
    public DateTime endDate;
}
保存时,单击:

  private void Save_Click(object sender, EventArgs e)
    {

        List<CountryWithDates> countryDates = new List<CountryWithDates>();

        for (int i = 0; i < Countries_LB.Items.Count; i++)
        {
            if (Countries_LB.GetItemChecked(i))
            {         
                countryDates.Add(new CountryWithDates(){country = Countries_LB.Items[i].ToString(),
                    firstMarkdownDate = DateTime.Parse(firstDatePicker.Text),
                    furtherMarkdownDate = DateTime.Parse(furtherDatePicker.Text),
                    rolldownMarkdownDate = DateTime.Parse(rolldownDatePicker.Text),
                    endMarkdownDate = DateTime.Parse(endMarkdownPicker.Text)});
            }

        }


//THIS DOESNT DO ANYTHING - I WANT TO BIND THE SOURCE TO THE GRIDVIEW but i dont see the output in the data gridview on the form when i click save
            var bindingList = new BindingList<CountryWithDates>(countryDates);
            var source = new BindingSource(bindingList, null);
            gv_Countries.DataSource = source;

        }
private void保存\u单击(对象发送方,事件参数e)
{
List countryDates=新列表();
对于(int i=0;i
如果我这样做,我会:

  • 将新数据集添加到我的项目中
  • 打开数据集设计器
  • 添加一个DataTable,称之为CountryWithDates,6列(Country、First、Further、Markdown、End、SaveThisRow(布尔))
  • 保存数据集
  • 打开表单设计器
  • 显示“数据源”窗口
  • 将代表CountryWithDates的节点拖到设计器上
DataGridView会出现,dataset、bindingsource等也会出现。所有内容都已绑定

当需要保存到磁盘时,您只想保存那些选中的项目,
datatable.Copy()
it,然后删除所有未标记为保存的行,然后调用WriteXml保存已清理的副本。可能是这样(未经测试):


如果我这样做,我会:

  • 将新数据集添加到我的项目中
  • 打开数据集设计器
  • 添加一个DataTable,称之为CountryWithDates,6列(Country、First、Further、Markdown、End、SaveThisRow(布尔))
  • 保存数据集
  • 打开表单设计器
  • 显示“数据源”窗口
  • 将代表CountryWithDates的节点拖到设计器上
DataGridView会出现,dataset、bindingsource等也会出现。所有内容都已绑定

当需要保存到磁盘时,您只想保存那些选中的项目,
datatable.Copy()
it,然后删除所有未标记为保存的行,然后调用WriteXml保存已清理的副本。可能是这样(未经测试):


您应该在类中创建公共属性,而不是公共字段

classcountrywithdates
{
//遵循命名规则很好,我将留给你。
公共字符串国家{get;set;}
public DateTime firstDate{get;set;}
公共日期时间进一步日期{get;set;}
公共日期时间回滚日期{get;set;}
公共日期时间结束日期{get;set;}
public CountryWithDates(){}
公共重写字符串ToString()
{
返回国;
}
}
通过这种方式,您可以将
CountryWithDates
对象的列表绑定到
CheckedListBox

var lst=newlist();
//添加新对象。。。
//lst.Add(新的CountryWithDates{country=“country 1”,firstDate…});
checkedListBox1.DataSource=null;
checkedListBox1.DataSource=lst;
要从列表中获取并更新选中的项目,请创建一个新的
BindingSource
,并将其绑定到
DataGridView
,只需执行以下操作:

checkedListBox1.CheckedItems
.Cast()
托利斯先生()
.ForEach(项目=>
{
item.firstDate=firstDatePicker.Value;
item.FurthDate=FurthDatePicker.Value;
item.rolldownDate=rolldownDatePicker.Value;
item.endDate=endMarkdownPicker.Value;
});
dataGridView1.DataSource=null;
var bs=newbindingsource(checkedListBox1.CheckedItems.Cast(),null);
dataGridView1.DataSource=bs;

您应该在类中创建公共属性,而不是公共字段

classcountrywithdates
{
//遵循命名规则很好,我将留给你。
公共字符串国家{get;set;}
public DateTime firstDate{get;set;}
公共日期时间进一步日期{get;set;}
公共日期时间回滚日期{get;set;}
公共日期时间结束日期{get;set;}
public CountryWithDates(){}
公共重写字符串ToString()
{
返回国;
}
}
通过这种方式,您可以将
CountryWithDates
对象的列表绑定到
CheckedListBox

var lst=newlist();
//添加新对象。。。
//lst.Add(新的CountryWithDates{country=“country 1”,firstDate…});
checkedListBox1.DataSource=null;
checkedListBox1.DataSource=lst;
要从列表中获取并更新选中的项目,请创建一个新的
BindingSource
,并将其绑定到
DataGridView
,只需执行以下操作:

checkedListBox1.CheckedItems
.Cast()
托利斯先生()
.ForEach(项目=>
{
item.firstDate=firstDatePicker.Value;
项目.日期
private blah SaveButton_Click(blah){

    var dt = (CountryWithDatesDataTable)_myDataset.CountryWithDates.Copy();
    for(int i = dt.Count - 1; i >= 0; i--){
      if(!dt[i].SaveThisRow)
        dt[i].Delete(); //mark row deleted
    }
    dt.WriteXml(@"C:\temp\dt.xml")

}