典型的DataGridView问题 [英] A Typical DataGridView problem

查看:119
本文介绍了典型的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 the DataGridView can display only one level of Tabular data. It cannot show Tables nested inside a cell. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆