C# 如何使复选框列表项为只读或将其删除?
我正在开发一个C# 如何使复选框列表项为只读或将其删除?,c#,winforms,checkboxlist,C#,Winforms,Checkboxlist,我正在开发一个windows窗体应用程序,它在checkboxList中显示我在datagridview中的所有列。首先,我在SQL中设置选中的所有可以为空的项。我想删除所有未选中的或使其成为只读。我试图将它转换为复选框,但它不起作用。我已尝试从复选框列表中删除项目,但出现以下错误设置DataSource属性时无法修改项目集合。 有什么想法或提示吗 foreach (DataGridViewColumn column in ((MainSoftwareForm)mainSoftware).dat
windows窗体
应用程序,它在checkboxList
中显示我在datagridview
中的所有列。首先,我在SQL
中设置选中的所有可以为空的项。我想删除
所有未选中的或使其成为只读
。我试图将它转换为复选框,但它不起作用。我已尝试从复选框列表中删除项目,但出现以下错误设置DataSource属性时无法修改项目集合。
有什么想法或提示吗
foreach (DataGridViewColumn column in ((MainSoftwareForm)mainSoftware).dataGridViewImportParts.Columns)
{
var columns = ((MainSoftwareForm)mainSoftware).dataGridViewImportParts.Columns.Cast<DataGridViewColumn>()
.Select(x => new { x.Name, x.HeaderText }).ToList();
checkedListBoxIPColumns.DataSource = columns;
checkedListBoxIPColumns.ValueMember = "Name";
checkedListBoxIPColumns.DisplayMember = "HeaderText";
//Set initial check state based on columns visibility
for (int i = 0; i < checkedListBoxIPColumns.Items.Count; i++)
{
if(mOS_PackOSDataSet.PARTLIST.Columns[i].AllowDBNull==true)
{
dynamic item = checkedListBoxIPColumns.Items[i];
checkedListBoxIPColumns.SetItemChecked(i, true);
}
else
{
}
}
checkedListBoxIPColumns.ItemCheck += (obj, args) =>
{
dynamic item = checkedListBoxIPColumns.Items[args.Index];
var visible = args.NewValue == CheckState.Checked ? true : false;
((MainSoftwareForm)mainSoftware).dataGridViewImportParts.Columns[(string)item.Name].Visible = visible;
};
}
foreach((MainSoftwareForm)mainSoftware.dataGridViewImportParts.Columns中的DataGridViewColumn列)
{
var columns=((MainSoftwareForm)mainSoftware.dataGridViewImportParts.columns.Cast()
.Select(x=>new{x.Name,x.HeaderText}).ToList();
checkedListBoxIPColumns.DataSource=列;
checkedListBoxIPColumns.ValueMember=“Name”;
checkedListBoxIPColumns.DisplayMember=“HeaderText”;
//基于列可见性设置初始检查状态
对于(int i=0;i
{
动态项=checkedListBoxIPColumns.Items[args.Index];
var visible=args.NewValue==CheckState.Checked?true:false;
((MainSoftwareForm)mainSoftware).dataGridViewImportParts.Columns[(string)item.Name].Visible=Visible;
};
}
如果你投反对票,我很乐意解释原因:)我已经找到了解决问题的办法。如果它们在SQL中不允许为null,我会一直将它们设置为未选中状态
checkedListBoxPartList.ItemCheck += (obj, args) =>
{
if (mOS_PackOSDataSet.PARTLIST.Columns[args.Index].AllowDBNull == true)
{
dynamic testOne = checkedListBoxPartList.Items[args.Index];
var test = args.NewValue == CheckState.Checked ? true : false;
((MainSoftwareForm)mainSoftware).dataGridViewPartLists.Columns[(string)testOne.Name].Visible = test;
}
else
{
dynamic item = checkedListBoxPartList.Items[args.Index];
if (args.CurrentValue == CheckState.Unchecked) args.NewValue = CheckState.Unchecked;
var visibleIndeterminate = args.NewValue == CheckState.Unchecked ? false : false;
((MainSoftwareForm)mainSoftware).dataGridViewPartLists.Columns[(string)item.Name].Visible = visibleIndeterminate;
}
};
嗯,错误信息很清楚,不是吗?您可以停止绑定cblist,也可以从数据源中删除这些项。如果您不希望删除项目,而是希望它们是只读的,您可能希望查看,或者建议更改为ListView并读取