典型的DataGridView问题 [英] A Typical DataGridView problem
本文介绍了典型的DataGridView问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ShowEntityOfInherited
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<student> All = new List<student>();
Student s1 = new Student();
s1.StudentName = "Moumit";
s1.StudentRoll = 10;
s1.StudentClass.KlassName = "V";
Student s2 = new Student();
s2.StudentName = "Moumit1";
s2.StudentRoll = 11;
s2.StudentClass.KlassName = "VI";
All.Add(s1);
All.Add(s2);
dgv.BindingContext = new BindingContext();
dgv.DataSource = All;
dgv.Columns["StudentName"].HeaderText = "Name";
dgv.Columns["StudentRoll"].HeaderText = "Roll";
//dgv.Columns["KlassName"].HeaderText = "Klass"; //Not working
//dgv.Columns["Klass.KlassName"].HeaderText = "Klass"; //Not working
}
}
public class Klass
{
public string KlassName { get; set;}
}
public class Student
{
public string StudentName { get; set; }
public int StudentRoll { get; set; }
public Klass StudentClass { get; set; }
public Student()
{
StudentClass = new Klass();
}
}
}
我想在列中显示Klass值,以……......而是显示类名……如何解决……..
I wanna show Klass value in column to......... But it is showing class name instead ... how to solve it........
推荐答案
原因是DataGridView
只能显示一个级别的Tabular data
.它不能显示嵌套在cell
内的Tables
.要获得所需的结果,请修改代码,如下所示:
The reason is that theDataGridView
can display only one level ofTabular data
. It cannot showTables
nested inside acell
. To get the desired result modify the code as follows:
namespace ShowEntityOfInherited
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<student> All = new List<student>();
Student s1 = new Student();
s1.StudentName = "Moumit";
s1.StudentRoll = 10;
s1.KlassName = "V";
Student s2 = new Student();
s2.StudentName = "Moumit1";
s2.StudentRoll = 11;
s2.KlassName = "VI";
All.Add(s1);
All.Add(s2);
dgv.BindingContext = new BindingContext();
dgv.DataSource = All;
dgv.Columns["StudentName"].HeaderText = "Name";
dgv.Columns["StudentRoll"].HeaderText = "Roll";
dgv.Columns["KlassName"].HeaderText = "Klass";
}
}
// public class Klass
// {
// public string KlassName { get; set;}
// }
public class Student
{
public string StudentName { get; set; }
public int StudentRoll { get; set; }
public string KlassName { get; set; }
// public Student()
// {
// StudentClass = new Klass();
// }
}
}
看这篇文章:
^ ]
Look at this article:
http://blogs.msdn.com/b/msdnts/archive/2007/01/19/how-to-bind-a-datagridview-column-to-a-second-level-property-of-a-data-source.aspx[^]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace ShowEntityOfInherited
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
List<student> All = new List<student>();
Student s1 = new Student();
s1.StudentName = "Moumit";
s1.StudentRoll = 10;
s1.StudentClass.KlassName = "V";
s1.StudentClass.KlassMonitor = "RAM";
Student s2 = new Student();
s2.StudentName = "Moumit1";
s2.StudentRoll = 11;
s2.StudentClass.KlassName = "VI";
s2.StudentClass.KlassMonitor = "Shyam";
All.Add(s1);
All.Add(s2);
//
dgv.BindingContext = new BindingContext();
dgv.DataSource = All;
//
if (!dgv.Columns.Contains("ABC"))
{
DataGridViewTextBoxColumn dc = new DataGridViewTextBoxColumn();
dc.Name = "ABC";
dgv.Columns.Add(dc);
}
//
dgv.Columns["StudentName"].HeaderText = "Name";
dgv.Columns["StudentRoll"].HeaderText = "Roll";
dgv.Columns["StudentClass"].HeaderText = "Class";
dgv.Columns["ABC"].HeaderText = "Monitor";
}
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
string cName = dgv.Columns[e.ColumnIndex].Name;
if (dgv.Rows[e.RowIndex].DataBoundItem != null)
{
switch (cName)
{
case "StudentClass":
e.Value = ((Student)dgv.Rows[e.RowIndex].DataBoundItem).StudentClass.KlassName;
break;
case "ABC":
e.Value = ((Student)dgv.Rows[e.RowIndex].DataBoundItem).StudentClass.KlassMonitor;
break;
default:
break;
}
}
}
}
public class Klass
{
public string KlassName { get; set; }
public string KlassMonitor { get; set; }
}
public class Student
{
public string StudentName { get; set; }
public int StudentRoll { get; set; }
public Klass StudentClass { get; set; }
public Student()
{
StudentClass = new Klass();
}
}
}
</student></student>
以这种方式暂时解决了..........
In that way it solved temporarily ...........
这篇关于典型的DataGridView问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文