2011-11-16 1 views
1

십진수 값이 들어있는 바인딩 된 콤보 상자 열이있는 DataGridview가 있습니다. 유효한 10 진수 값의 범위가 있으므로 사용자가 선택할 수 있습니다. 그러나 이상한 문제에 직면 해 있습니다. 선택한 값으로 콤보 상자를 클릭하면 어떻게 든 목록의 첫 번째 콤보 상자로 재설정되어 이미 선택되어있는 것을 잃게됩니다. 나는 그것의 두 배 값 (콤보 상자의 목록에서 선택주의) enter image description hereC# DataGridView Decimal ComboBox 열

와 유사한 열을 선택하면

enter image description here

이것은 : 사진

이것은 윈도우의 초기보기입니다 봐

10 진수 값으로 열을 선택하는 경우입니다. 동작 소수점에 대한 이상한 이유

 public Form1() 
     { 
      InitializeComponent(); 

      dgwResult.AutoGenerateColumns = false; 
      var list = new List<string>(){"A", "B", "C", "D"}; 
      var list2 = new List<double>(); 
      var list3 = new List<decimal>(); 
      for (int i = 0; i < 300; i++) 
      { 
       list2.Add((double)i); 
       list3.Add((decimal)i); 
      } 
      dgw_2.DataSource = list; 
      dgw_2.DataPropertyName = "two"; 
      dgw_3.DataSource = list2; 
      dgw_3.DataPropertyName = "three"; 
      dgw_4.DataSource = list3; 
      dgw_4.DataPropertyName = "four"; 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("one", typeof(string)); 
      dt.Columns.Add("two", typeof(string)); 
      dt.Columns.Add("three", typeof(double)); 
      dt.Columns.Add("four", typeof(decimal)); 
      dt.Rows.Add(new object[] { "akjsgdf", "A", 10.0, 10.0m }); 
      dt.Rows.Add(new object[] { "akjsgdf", "B", 15.0, 15.0m }); 
      dt.Rows.Add(new object[] { "akjsgdf", "C", 20.0, 20.0m }); 
      dt.Rows.Add(new object[] { "akjsgdf", "D", 15.0, 15.0m }); 
      dt.Rows.Add(new object[] { "akjsgdf", "C", 293.0, 293.0m }); 
      dgwResult.DataSource = dt; 
     } 

private void InitializeComponent() 
     { 
      this.dgwResult = new System.Windows.Forms.DataGridView(); 
      this.dgw_1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 
      this.dgw_2 = new System.Windows.Forms.DataGridViewComboBoxColumn(); 
      this.dgw_3 = new System.Windows.Forms.DataGridViewComboBoxColumn(); 
      this.dgw_4 = new System.Windows.Forms.DataGridViewComboBoxColumn(); 
      ((System.ComponentModel.ISupportInitialize)(this.dgwResult)).BeginInit(); 
      this.SuspendLayout(); 
      // 
      // dgwResult 
      // 
      this.dgwResult.AllowUserToAddRows = false; 
      this.dgwResult.AllowUserToDeleteRows = false; 
      this.dgwResult.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; 
      this.dgwResult.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 
      this.dgwResult.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 
      this.dgw_1, 
      this.dgw_2, 
      this.dgw_3, 
      this.dgw_4}); 
      this.dgwResult.Location = new System.Drawing.Point(12, 12); 
      this.dgwResult.Name = "dgwResult"; 
      this.dgwResult.RowHeadersVisible = false; 
      this.dgwResult.Size = new System.Drawing.Size(268, 150); 
      this.dgwResult.TabIndex = 0; 
      this.dgwResult.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgwResult_CellClick); 
      // 
      // dgw_1 
      // 
      this.dgw_1.DataPropertyName = "one"; 
      this.dgw_1.HeaderText = "One"; 
      this.dgw_1.Name = "dgw_1"; 
      // 
      // dgw_2 
      // 
      this.dgw_2.DataPropertyName = "two"; 
      this.dgw_2.HeaderText = "Two"; 
      this.dgw_2.Name = "dgw_2"; 
      // 
      // dgw_3 
      // 
      this.dgw_3.DataPropertyName = "three"; 
      this.dgw_3.HeaderText = "Double"; 
      this.dgw_3.Name = "dgw_3"; 
      // 
      // dgw_4 
      // 
      this.dgw_4.DataPropertyName = "four"; 
      this.dgw_4.HeaderText = "Decimal"; 
      this.dgw_4.Name = "dgw_4"; 
      this.dgw_4.Resizable = System.Windows.Forms.DataGridViewTriState.True; 
      this.dgw_4.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; 
      // 
      // Form1 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(292, 273); 
      this.Controls.Add(this.dgwResult); 
      this.Name = "Form1"; 
      this.Text = "Form1"; 
      ((System.ComponentModel.ISupportInitialize)(this.dgwResult)).EndInit(); 
      this.ResumeLayout(false); 

     } 

     private System.Windows.Forms.DataGridView dgwResult; 
     private System.Windows.Forms.DataGridViewTextBoxColumn dgw_1; 
     private System.Windows.Forms.DataGridViewComboBoxColumn dgw_2; 
     private System.Windows.Forms.DataGridViewComboBoxColumn dgw_3; 
     private System.Windows.Forms.DataGridViewComboBoxColumn dgw_4; 

누군가가 지적 할 수 : 선택 (번호 293) 코드는 내가 사용되는 다음

enter image description here

누락? 어쩌면 여기서 간단한 걸 놓칠까요?

+0

@ V4Vendetta :이 경우 전혀 바인딩되지 않습니다. 흥미로운 점을 발견했습니다. 골절 부위 (즉, 293.0m 대신 293m)를 지정하지 않으면 정상적으로 작동합니다. – Blablablaster

답변

0

"이상한"연산을받는 이유는 십진수가 열의 DataSource을 채우는 데 사용 된 목록에 없기 때문입니다.

문제는이에 DataTable을 채 웁니다 코드를 변경하여 고정 :

dt.Rows.Add(new object[] { "akjsgdf", "A", 10.0, 10m }); 
dt.Rows.Add(new object[] { "akjsgdf", "B", 15.0, 15m }); 
dt.Rows.Add(new object[] { "akjsgdf", "C", 20.0, 20m }); 
dt.Rows.Add(new object[] { "akjsgdf", "D", 15.0, 15m }); 
dt.Rows.Add(new object[] { "akjsgdf", "C", 293.0, 293m }); 

내가 DataGridView에 컬럼의 DataSource 찾을 경기의 각 요소에 .ToString() 함수를 호출 생각한다. 은 (문자열 용어로) 1과 같지 않으므로 콤보 상자의 드롭 다운 메뉴를 열 때 항목이 선택되지 않습니다.