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++;
}
}




