3

我有一個自定義DataGrid用戶控件的Silverlight 3工具庫。此網格沒有直達WCF RIA服務實體類型,所以我使用反射來添加新項,當用戶點擊時,它的空電網:如何立即驗證Silverlight 3 Datagrid中新插入的行?

private void InsertEmptyRecord() 
{ 
    if (this._dataGrid.ItemsSource == null) 
     return; 

    Type[] typeParameters = this._dataGrid.ItemsSource.GetType().GetGenericArguments(); 
    if (typeParameters.Count() > 0) 
    { 
     Type itemType = typeParameters[0]; 
     object newItem = System.Activator.CreateInstance(itemType); 

     Type sourceType = typeof(System.Windows.Ria.EntityCollection<>); 
     Type genericType = sourceType.MakeGenericType(itemType); 
     System.Reflection.MethodInfo addMethod = genericType.GetMethod("Add"); 
     addMethod.Invoke(this._dataGrid.ItemsSource, new object[] { newItem }); 

     // == Validate data here == 
    } 
} 

這工作,但我需要它新項目添加後也會生效。有兩種方法我可以看到這樣做:

  1. 強制用戶進入編輯模式 新行的 網格中的第一個單元格。 (這將迫使 驗證,如果他們點擊任何地方 其他頁面上。)
  2. 強制驗證 運行時立即將新行 添加(或當電網失去 焦點。)

我還沒有能夠讓這兩個工作。嘗試過,但它只選擇行,不強制驗證運行:

this._dataGrid.SelectedItem = newItem; 
System.ComponentModel.IEditableObject editableItem = newItem as System.ComponentModel.IEditableObject; 
if (editableItem != null) 
    editableItem.BeginEdit(); 

有什麼建議嗎?

+0

我一直在嘗試做類似的事情:http://stackoverflow.com/questions/2131666/how-can-i-put-a-silverlight-3-datagridcell-into-edit-mode-in-碼。我沒有自定義庫,但我也在代碼中創建該行。 – ssg31415926 2010-02-05 17:12:32

回答

1

剛剛得到這個工作感謝從this question一些幫助。

我加入的代碼從上面的部分下面的「==驗證數據在這裏」:

DataGridRow newRow = this._dataGrid.ChildrenOfType<DataGridRow>().FirstOrDefault(); 
if (newRow != null) 
{ 
    newRow.Loaded += (sender, e) => 
    { 
     this._dataGrid.CurrentItem = newItem; 
     this._dataGrid.BeginEdit(); 
    }; 
} 

這迫使第一單元立即進入編輯模式。