Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 如何使复选框列表项为只读或将其删除?_C#_Winforms_Checkboxlist - Fatal编程技术网

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并读取