2009-02-11 53 views
0

我們正在爲我們的Web應用程序創建演示模式。我們正在通過創建綁定到真實客戶端的新用戶來解決這個問題,顯示他們的所有數據,但是過濾某些字段是不可識別的(名稱,重要數字等等)。如何防止DataRow單元值被重置?

這裏奇怪的部分是數據被正確過濾了標準的「顯示一個」頁面,我打電話給第一個函數。當我嘗試在列表頁面上調用第二個時,過濾器不起作用。我已經介紹了函數,看來在第一個函數中,正在設置值,但是當foreach迭代到下一行時,它們將被重置爲原始值。

列表掩碼是應該被掩碼並在模型中靜態定義的列名稱列表。

public static void ApplyDemoMask(DataRow row, List<string> mask) 
{ 
    foreach (DataColumn column in row.Table.Columns) 
    { 
     if (mask.Contains(column.ColumnName)) 
     { 
      if (column.ColumnName == "ClientName") 
       row[column] = "Demo Client"; 
      // More fields follow... 
     } 
    } 
} 

public static void ApplyDemoMask(FindResponse response, List<string> mask) 
{ 
    foreach (DataRow row in response.ResultTable.Rows) 
     ApplyDemoMask(row, mask); 
} 

我感謝任何可以給予的幫助。出於某種原因,當我涉及到System.Data時,我有點笨拙。

編輯:如果它有幫助,當我的調試器着陸在第二個函數的「}」時,row [「ClientName」]就像它應該是「Demo Client」一樣,但是response.ResultTable.Rows [0] [ 「ClientName」]是「原始客戶端」。奇怪的!

編輯:綁定到我的網格時,我必須指定列名稱。首先,我們使用ASP.NET MVC,並使用我們編寫的自定義控件來幫助我們從ASP.NET過渡。其次,我們有很多模板字段。對於這個Web應用程序共享代碼和一個非常大的WinForms業務線應用程序,不能有任何巨大而徹底的改變。

+0

您是否將數據集綁定到控件。如果是刪除綁定並以編程方式填充控件 – Lonzo 2009-02-11 06:34:09

+0

這將是一個比這個權證更大的更改。理想情況下,我想修改我的數據並完成它,但我會盡量作爲最後的手段。 – 2009-02-11 06:43:07

回答

0

我是一個心不在焉的傻子!

查看ResultTable的定義...

public DataTable ResultTable { get { return this[_resultKey]; } } 
public DataTable this[string tableName] 
{ 
    get { return _data.Tables[tableName].DefaultView.ToTable(); } 
} 

我在更改DataTable的DefaultView.ToTable(),返回時再次讀取ResultTable這是丟失。我完全忘記了這種行爲以及我們的內部FindResponse類如何工作。這對我們的應用程序來說是有意義的,所以我只是添加了一個類似的BaseTable訪問器,它不會通過DataTable.DefaultView進行過濾,對此進行了更改,並且所有工作都正常進行。

感謝您的回覆,抱歉,我沒有提供足夠的信息。

0

也許您已刪除並多次添加相同的記錄。所以你正在更新已刪除的。改變第二種方法爲:

public static void ApplyDemoMask(FindResponse response, List<string> mask) 
{ 
    foreach (DataRow row in response.ResultTable.Rows) 
    { 
     if (row.RowState != DataRowState.Deleted) 
     { 
      ApplyDemoMask(row, mask); 
     } 
    } 
} 

或類似的:

public static void ApplyDemoMask(FindResponse response, List<string> mask) 
{ 
    response.ResultTable.AcceptChanges(); 
    foreach (DataRow row in response.ResultTable.Rows) 
    { 
     ApplyDemoMask(row, mask); 
    } 
} 

希望這會有所幫助。