none
DataGridView.DataSource 能否使用具有struct的list呢? RRS feed

  • 問題

  • 如題,

    小弟製作了一個list<struct>

    想把它放進去DataGridView

    可是DataGridView.DataSource =list;

    這樣是可行的...但是卻沒有值跑出來.

    使用監看式看DataGridView.DataSource卻是有值的....不知道為何就是沒有顯示出來...

    懇請大大賜教!!

    2010年7月28日 上午 06:56

解答

  • .net 的 DataBinding 無法繫結到 public member field。必須是 public property。

    以您的例子來說,請改成下面的樣子即可

    public struct Test
    {
     public string A { get; set;}
     public DateTime T{ get; set;}
    }
    • 已標示為解答 yanchi 2010年7月28日 下午 12:30
    2010年7月28日 上午 09:36

所有回覆

  • http://forums.asp.net/p/1109165/1704585.aspx

     

    是不是沒指定要顯示的屬性?

    2010年7月28日 上午 07:56
  • 我試著作一次,可以顯示出來啊!可否將程式貼上來呢?

    我的程式如下:

    public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
    
    		List<Emp> GetEmps()
    		{
    			var list = new List<Emp>
    			      	{
    			      		new Emp { Id = 1, Name = "Name1"},
    										new Emp { Id = 2, Name = "Name2"},
    			      	};
    			return list;
    		}
    
    		private void Form1_Load(object sender, EventArgs e)
    		{
    			var lists = GetEmps();
    			dataGridView1.DataSource = lists;
    		}
    	}
    
    	internal struct Emp
    	{
    		public string Name { get; set; }
    		public int Id { get; set; }
    	}
    
    2010年7月28日 上午 08:14
  • 不知道發問者是不是跟我找的link的問題一樣

    AutoGenerateColumns=False

    才沒法顯示

    2010年7月28日 上午 08:19
  • 我猜,發問者是問 WinForm 的問題。因為

    1. 如果是 ASP.NET,就會到  ASP.NET 的版
    2. 有使用到 DataGridView 的字樣,很像是 WinForm的 DataGridView control
    2010年7月28日 上午 08:30
  • 您好,

    這是我寫的方式!!麻煩您幫忙了!!

        public struct Test
        {
          public string A;
          public DateTime T;
        }
        List<Test> Tlist = new List<Test>();
        private void Form1_Load(object sender, EventArgs e)
        {
          Test t;
          t.A = "A";
          t.T =DateTime.Now;
          Tlist.Add(t);
          dataGridView1.DataSource = Tlist;
        }
    
    編譯都沒錯...但是資料就是沒辦法在DataGridView的控制項上面顯示出來!

    2010年7月28日 上午 09:26
  • .net 的 DataBinding 無法繫結到 public member field。必須是 public property。

    以您的例子來說,請改成下面的樣子即可

    public struct Test
    {
     public string A { get; set;}
     public DateTime T{ get; set;}
    }
    • 已標示為解答 yanchi 2010年7月28日 下午 12:30
    2010年7月28日 上午 09:36
  • 謝謝您,我把問題解決了!!! 不過還是不太懂它的原理@@" 可以再麻煩大大稍微解釋一下嗎? 再次感謝大大的協助
    2010年7月28日 下午 12:31
  • 這個是 .net framework design 的方法。 使用  Reflection 技術實作Databinding 時,找的是 public property 而非 public field。

    有寫過 reflection 才有感覺。

    2010年7月29日 上午 03:01
  • Hi,

    這方面可參閱Effective C#條款一

    [C#]Effective C# 條款一: 使用屬性代替公有欄位


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年7月29日 上午 04:14