개체의 BindingList에 바인딩 된 DataGrid 컨트롤이 있습니다. 객체 클래스의 속성 중 하나는 부울입니다. 나는 datagridview에서 해당 열을 체크 박스 유형으로 사용자 정의했습니다.체크 박스 열이있는 DataGrid보기에서 FormatException이 수정 됨
바인딩 목록에서 가져온 값이있는 행에 대해 datagridview가로드되면 문제가 해결됩니다. 그러나 "새 항목"줄을 그릴 때 확인란 셀에 System.FormatException이 throw됩니다.
정확한 오류 메시지 (관련 부분)
다음과 같은 예외가있는 DataGridView에서 발생
System.FormatException: Value '' cannot be converted to type 'Boolean'. at System.Windows.Forms.Formatter.FormatObjects....
내이 발생할 수 있음을 나타내는 검색 할 때 체크 박스의 참 거짓 및 불확정 값 열이 설정되지 않았습니다. 내 비슷한 문제를 참조하는
URL은 :
는 그러나, 나는 (아래 코드와 같이)이 값을 설정했습니다. 이 외에도 내 문제와 관련된 다른 정보를 찾을 수 없습니다. 나는 문제가 체크 박스의 사용에 국한되어 있다는 것을 확신한다. 왜냐하면 칼럼 타입을 간단한 텍스트 박스로 바꿀 때, 나는 예외 에러를 얻지 않는다. 단순히 "새로운 엔트리"라인이 표시된 true/false 컬럼이다. 가치 없음.
된 DataGridView 코드 :
//
// dataGridView1
//
this.dataGridView1.AllowUserToResizeRows = false;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.NullValue = null;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
this.dataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;
this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.columnDescription,
this.columnExpedite,
this.columnId,
this.columnQuantity,
this.columnEntryDate,
this.columnUpdateDate});
this.dataGridView1.Location = new System.Drawing.Point(3, 5);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridView1.Size = new System.Drawing.Size(1015, 241);
this.dataGridView1.TabIndex = 0;
//
// columnDescription
//
this.columnDescription.DataPropertyName = "Description";
this.columnDescription.FillWeight = 200F;
this.columnDescription.HeaderText = "Description";
this.columnDescription.Name = "columnDescription";
//
// columnExpedite
//
this.columnExpedite.DataPropertyName = "Expedite";
this.columnExpedite.FalseValue = "false";
this.columnExpedite.HeaderText = "Expedited";
this.columnExpedite.Name = "columnExpedite";
this.columnExpedite.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.columnExpedite.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
this.columnExpedite.TrueValue = "true";
this.columnExpedite.IndeterminateValue = "false";
//
// columnId
//
this.columnId.DataPropertyName = "Id";
this.columnId.HeaderText = "Id";
this.columnId.Name = "columnId";
this.columnId.Visible = false;
//
// columnQuantity
//
this.columnQuantity.DataPropertyName = "Quantity";
this.columnQuantity.HeaderText = "Quantity";
this.columnQuantity.Name = "columnQuantity";
//
// columnEntryDate
//
this.columnEntryDate.DataPropertyName = "EntryDateTime";
dataGridViewCellStyle2.Format = "g";
dataGridViewCellStyle2.NullValue = null;
this.columnEntryDate.DefaultCellStyle = dataGridViewCellStyle2;
this.columnEntryDate.HeaderText = "Entry Date/Time";
this.columnEntryDate.Name = "columnEntryDate";
this.columnEntryDate.ReadOnly = true;
this.columnEntryDate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.columnEntryDate.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// columnUpdateDate
//
this.columnUpdateDate.DataPropertyName = "UpdateDateTime";
this.columnUpdateDate.HeaderText = "Last Update Date/Time";
this.columnUpdateDate.Name = "columnUpdateDate";
this.columnUpdateDate.ReadOnly = true;
this.columnUpdateDate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
this.columnUpdateDate.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
편집 추가 : 내가 해봤 몇 가지 추가하십시오 DefaultValueNeeded 이벤트를 사용하여 시도
. 디폴트 값은 새로운 엔트리 라인을 "만지면"로드되지만 그 전에는 "새로운 엔트리"라인이 실제로 페인팅 될 때 예외가 발생합니다.
dataGridView1.Columns [ "columnExpedite"]를 사용하려고 시도했습니다. DefaultCellStyle.NullValue = "false"; 같은 결과가 나타납니다.
이 예외는 어떻게 해결합니까?
이것은 좋은 지적입니다. 나는 그것을 처리 했어야하는데, 나의 bind 문은 폼로드에서 발생한다. 또한 내 생성자는 실제로 부울 멤버에 대한 기본값을 설정합니다. "새 항목"행을 클릭하면 기본값이 가져옵니다 (기본 날짜도 설정 됨). "새 항목"줄을 화면에 그릴 때 문제가 발생합니다. – Allen
는 그 이벤트를 시도하고, 값을 설정 ... 그리고 그것을 채울 않지만, 내가 새 항목 ... 예외 화재가 새 항목 라인 페인트를 클릭하지 때까지. 문자 그대로 그 셀에서 멈 춥니 다. – Allen