2015-11-02 50 views
1

我想添加一個新的複選框列到綁定到數據集的ultrawridrid,當我添加一個新的列它說沒有找到密鑰,任何關於如何解決它的想法,謝謝...將複選框列添加到綁定到數據源的infragistics ultrawridrid

下面是代碼

private void grdPayVis_InitializeLayout(object sender, InitializeLayoutEventArgs e) 
{ 

    var gridBand = grdPayVis.DisplayLayout.Bands[0]; 

    gridBand.Columns["Select"].Header.Caption = "Select"; 
    gridBand.Columns["Select"].Header.Appearance.TextHAlign = HAlign.Center; 
    gridBand.Columns["Select"].Header.VisiblePosition = 0; 
    gridBand.Columns["Select"].Hidden = false; 
    gridBand.Columns["Select"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox; 
    gridBand.Columns["Select"].AutoSizeMode = ColumnAutoSizeMode.AllRowsInBand; 
    gridBand.Columns["Select"].CellActivation = Activation.AllowEdit; 
    gridBand.Columns["Select"].CellAppearance.TextHAlign = HAlign.Center; 
    gridBand.Columns["Select"].CellClickAction = CellClickAction.Edit; 

} 

Swetha

回答

1

當電網有其數據源設置爲一個DataTable或其他結合源,它會自動創建數據表中或th屬性中的列e數據源。如果你想有另一列則需要嘗試從樂隊列

private void grdPayVis_InitializeLayout(object sender, InitializeLayoutEventArgs e) 
{ 
    var gridBand = grdPayVis.DisplayLayout.Bands[0]; 

    // Check if the column exists, if not, add it 
    if(!gridBand.Columns.Exists("Select")) 
     gridBand.Columns.Add("Select", "Select"); 


    // Not needed, the ADD adds the Key and the Caption 
    // gridBand.Columns["Select"].Header.Caption = "Select"; 

    // Now you can reference the column with the Key = "Select" 
    gridBand.Columns["Select"].Header.VisiblePosition = 0; 
    gridBand.Columns["Select"].Hidden = false; 
    gridBand.Columns["Select"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox; 
    gridBand.Columns["Select"].AutoSizeMode = ColumnAutoSizeMode.AllRowsInBand; 
    gridBand.Columns["Select"].CellClickAction = CellClickAction.Edit; 
} 
+0

非常感謝您的回覆,它的工作原理非常完美,但在加載複選框時總是選中一個迷你藍色方塊,並且在檢查字段中,我該如何刪除此...我希望我的問題清楚,如果不是請讓我知道... – Agasthya

+0

很明顯。 CheckBox沒有綁定到任何列,所以它的初始值是不確定的。您可以使用InitializeRow方法爲該複選框設置初始值,或者向綁定源添加具有初始真/假值的布爾列。如果可能的話,更喜歡最後一種方法 – Steve

+0

非常感謝你的答覆,我最初嘗試在表中添加一列,但我無法正確檢索所選單元格的值,即使在檢查單元格時我也總是將該值設置爲false – Agasthya

0

以上史蒂夫的答案是很好的參考之前添加它,但它可以簡化,並且在一對夫婦的方式更好。

首先,很多代碼並不是真的需要。例如,列的默認隱藏狀態爲false,因此不需要設置該狀態。 AutoSizeMode和CellClickAction相同。另外,如果添加一個未綁定的列,則它的默認DataType是字符串,這對CheckBox列沒有多大意義。通過將DataType設置爲bool,您可以避免設置樣式的需要,並且還可以清除默認情況下每個單元不確定的問題。

private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e) 
    { 
     UltraGridLayout layout = e.Layout; 
     UltraGridBand rootBand = layout.Bands[0]; 

     if (false == rootBand.Columns.Exists("Select")) 
     { 
      UltraGridColumn checkBoxColumn = rootBand.Columns.Add("Select"); 
      checkBoxColumn.Header.VisiblePosition = 0; 
      checkBoxColumn.DataType = typeof(bool); 
     } 
    } 

作爲確定單元格的值並跟蹤「選擇」行,你必須瞭解如何網格單元格的編輯工作一點點。爲了真正理解它,設想一個包含DateTime信息的單元格。用戶輸入單元格並打算輸入日期,如「1/19/2015」。當用戶開始輸入時,他首先輸入'1'。如果您在此時檢查單元格的值,則網格不可能將單元格中的當前文本(「1」)轉換爲日期。因此,網格不會嘗試使用該值更新基礎數據源,直到出現其他情況,例如用戶離開單元格或將焦點放在網格上。

當然,如果單元格有一個複選框,則此問題不存在,因爲用戶無法輸入無效值,但網格仍以相同方式工作,並且不會更新值,直到用戶離開小區。

因此......當您處理任何未處於編輯模式(當前未激活)的單元格時,則可以可靠地使用單元格的Value屬性。當單元格處於編輯模式(處於活動狀態)時,您不能依賴從數據源讀取的值,您必須使用單元格的文本。

因此,給出一個布爾(複選框)列中的任意單元格,讓屏幕上的複選框的當前狀態的準確反映,你會做這樣的事情:

private bool GetCheckBoxCellCurrentValue(UltraGridCell cell) 
    { 
     if (cell.IsInEditMode) 
      return bool.Parse(cell.Text); 
     else 
      return (bool)cell.Value; 
    } 

最後,網格不保存任何種類的「檢查」單元列表。但是你可以自己做到這一點,沒有太多的困難。你必須做的是在綁定網格後立即建立初始列表。然後捕獲諸如CellChange,AfterRowAdded,BeforeRowDeleted之類的事件以及其他一些事件,以不斷更新您的列表。