Winform126 DataGrIdView ListView

DataGridView

csharp 复制代码
    private void butSumb_Click(object sender, EventArgs e)
    {
        int id=int.Parse(textBoxNum.Text);
        string name=textBoxName.Text.Trim();
        int state=checkBoxState.Checked ? 1 : 0;
        int classId = Convert.ToInt32(comboBoxClass.SelectedValue);
        Image pic = Properties.Resources.屏幕截图_2025_09_01_001901;
        
        StudentInfo stuInfo=new StudentInfo()
        {
        StuId = id,
            StuName =name,
            StuState = state,
            StuPic =pic,
           ClassId = classId
        };
        dataGridView1.DataSource = null;
        if (butSumb.Text == "新增")
        {
            stuList.Add(stuInfo);
            MessageBox.Show("新增成功");

        }else if(butSumb.Text == "修改")
        {
            editStu.StuName = name;
            editStu.StuState = state;
            editStu.StuPic = pic;
            editStu.ClassId = classId;
            MessageBox.Show("修改成功");

        }
        dataGridView1.DataSource= stuList;
    }
}
csharp 复制代码
       private void butAddStudent_Click(object sender, EventArgs e)
       {
           textBoxNum.ReadOnly = true;
           textBoxNum.Clear();
           textBoxName.Clear();
           checkBoxState.Checked = false;
           comboBoxClass.SelectedIndex = 0;
           butSumb.Text = "新增";
       }






csharp 复制代码
 int rowIndex = e.RowIndex;
 StudentInfo stuInfo = dataGridView1.Rows[rowIndex].DataBoundItem as StudentInfo;
 string message = "nums:" + stuInfo.StuId + " name:" + stuInfo.StuName;
 int column = e.ColumnIndex;
 var curCell = dataGridView1.Rows[rowIndex].Cells[column];
 string cellValue = curCell.FormattedValue.ToString();
 //这段代码是从 DataGridView 的单元格点击事件中提取的,主要用于获取当前选中行的绑定数据对象(StudentInfo)以及被点击单元格的显示值。
csharp 复制代码
  if (cellValue == "edit")

  {
      if (stuInfo != null)
      {
          editStu = stuInfo;
          textBoxNum.ReadOnly = true;
          textBoxNum.Text = stuInfo.StuId.ToString();
          textBoxName.Text = stuInfo.StuName;

          if (stuInfo.StuState == 1)
          {
              checkBoxState.Checked = true;
          }
          else
          {
              checkBoxState.Checked = false;
          }
          comboBoxClass.SelectedItem = stuInfo.ClassName;
          pictureBoxPic.Image = stuInfo.StuPic;
          butSumb.Text = "修改";
      }









怎么理解数据绑定

csharp 复制代码
        private void butBind_Click(object sender, EventArgs e)
        {
            stuList = new List<StudentInfo>();
            stuList.Add(new StudentInfo() { StuId = 01, StuName = "xiaoA", StuState = 1, ClassId = 1, StuPic = Properties.Resources.屏幕截图_2025_08_04_000637 });
            stuList.Add(new StudentInfo() { StuId = 02, StuName = "xiaoB", StuState = 1, ClassId = 2, StuPic = Properties.Resources.屏幕截图_2025_08_04_001149 });
            stuList.Add(new StudentInfo() { StuId = 03, StuName = "xiaoC", StuState = 0, ClassId = 3, StuPic = Properties.Resources.屏幕截图_2025_08_04_002238 });
            stuList.Add(new StudentInfo() { StuId = 04, StuName = "xiaoD", StuState = 1, ClassId = 5, StuPic = Properties.Resources.屏幕截图_2025_08_04_000637 });
            stuList.Add(new StudentInfo() { StuId = 05, StuName = "xiaoE", StuState = 0, ClassId = 1, StuPic = Properties.Resources.屏幕截图_2025_08_04_002238 });
            stuList.Add(new StudentInfo() { StuId = 06, StuName = "xiaoF", StuState = 1, ClassId = 4, StuPic = Properties.Resources.屏幕截图_2025_08_04_000637 });
            stuList.Add(new StudentInfo() { StuId = 07, StuName = "xiaoG", StuState = 0, ClassId = 1, StuPic = Properties.Resources.屏幕截图_2025_08_04_000637 });

            List<ClassInfo> classList = new List<ClassInfo>();
            classList.Add(new ClassInfo() { ClassId = 1, ClassName = "Class 1" });
            classList.Add(new ClassInfo() { ClassId = 2, ClassName = "Class 2" });
            classList.Add(new ClassInfo() { ClassId = 3, ClassName = "Class 3" });
            classList.Add(new ClassInfo() { ClassId = 4, ClassName = "Class 4" });
            classList.Add(new ClassInfo() { ClassId = 5, ClassName = "Class 5" });

            DataGridViewComboBoxColumn cboClassCol = dataGridView1.Columns["ColumnClass"]
as DataGridViewComboBoxColumn;
            cboClassCol.DataSource = classList;
            ColumnClass.DisplayMember = "ClassName";
            ColumnClass.ValueMember = "ClassId";
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = stuList;

        }





listview











可点击







点击checkbox无效 因为分组规则问题



注意:循环中的索引 i与 dicFiles的键严格对应(因为填充时 i是顺序递增的),因此 dicFiles[i]能正确检索路径。如果索引 i不存在于字典中,会抛出 KeyNotFoundException,但代码中通过循环范围控制避免了这一问题

csharp 复制代码
 foreach (ListViewGroup group in listView2.Groups)
 {
     group.HeaderAlignment = HorizontalAlignment.Center;
 }
csharp 复制代码
     listView2.Items.Clear();
     listView2.ShowGroups = false;
     if (imageList1.Images.Count > 0)
     {
         for (int i = 0; i < imageList1.Images.Count; i++)
         {
             string fileName = imageList1.Images.Keys[i];
             ListViewItem li = new ListViewItem();
             li.Text = fileName;
             li.ImageIndex = i;
             listView2.Items.Add(li);
         }

     }



这段代码组合起来,实现了一个标准的初始化或刷新 ListView显示内容的过程:先清空旧项,然后根据数据源(这里是 imageList1)逐个创建新项并添加。

csharp 复制代码
string[] files = Directory.GetFiles(path);
int i = 0;
foreach (string fpath in files)
{
    if (fileType.Contains(Path.GetExtension(fpath)))
    {
        Image img = Image.FromFile(fpath);
        string keyName = Path.GetFileNameWithoutExtension(fpath);
        imageList1.Images.Add(keyName, img);
        imageList2.Images.Add(keyName, img);
        dicFiles.Add(i, fpath);
        i++;
    }
}





相关推荐
kylezhao20195 小时前
第1章:第一节 开发环境搭建(工控场景最优配置)
开发语言·c#
钰fly7 小时前
C#文件与数据操作核心概念手册
c#
阿蒙Amon8 小时前
C#每日面试题-简述C#访问修饰符
windows·microsoft·c#
酩酊仙人10 小时前
ABP+Hangfire实现定时任务
后端·c#·asp.net·hangfire
阿蒙Amon11 小时前
C#每日面试题-属性和特性的区别
java·面试·c#
要记得喝水12 小时前
某公司C#-WPF面试题-来自nowcoder(含答案和解析)--2
c#·wpf
爱敲点代码的小哥15 小时前
类型转换 递归算法 编译错误 装箱和拆箱 知识点
开发语言·c#
时光追逐者16 小时前
一个 WPF 开源、免费的 SVG 图像查看控件
开源·c#·.net·wpf
江沉晚呤时16 小时前
构建智能代理的利器:深入解析 Microsoft Agent Framework
开发语言·c#
武藤一雄17 小时前
C# 中线程安全都有哪些
后端·安全·微软·c#·.net·.netcore·线程