2011-03-11 32 views
1

我有一個asp.net頁面上的幾個不同sqldatasources所有火一樣的onSelecting事件處理程序。原因是因爲事件處理程序中的相同代碼可以應用於所有數據源(實際上動態地在查詢中生成過濾器)。但是,現在我有另一個數據源,仍然可以使用大部分代碼,但需要稍微處理一下。我能做到這一點很容易,如果我能引用被觸發事件(我已經試過)數據源的ID,但是這似乎並不可能。這是我最初打算做的事:如何獲取在激發onSelecting事件數據源的DataSourceID的?

protected void sdsTable_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    SqlDataSource sds = sender as SqlDataSource; 
    string dsID = sds == null ? "" : sds.ID; 
    if (dsID == "aDataSourceID") 
    { 
     //do this 
    } 
    else 
    { 
     //do that 
    } 

    //more code 
} 

這並不起作用,因爲發件人是類型SqlDataSourceView,並試圖投發件人爲的SqlDataSource返回null。所以,我將它改爲SqlDataSourceView:

protected void sdsTable_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    SqlDataSourceView sds = sender as SqlDataSourceView; 
    string dsID = sds == null ? "" : sds.Name; //Tried Name property because ID isn't available 
    if (dsID == "aDataSourceID") 
    { 
     //do this 
    } 
    else 
    { 
     //do that 
    } 

    //more code 
} 

但是,這仍然行不通。 SqlDataSourceView似乎並不有一個可用的屬性,給當前觸發事件的數據源的DataSourceID的。有一個SqlDataSourceView.Name屬性,但這是不同的。有誰知道是否有可能在處理該事件時獲取激發選擇事件的DataSource的ID?如果是這樣,你能提供一個關於如何做到這一點的例子嗎?

謝謝!

回答

0

我還沒有試過,但SqlDataSource的具有GetViewNames()方法,也許你可以得到你的數據源的視圖名和檢查,看看哪一個具有當前SqlDataSourceView.Name

+0

感謝您的輸入:)該方法是受保護的,所以我認爲爲了能夠調用它,我需要創建一個新類型的控件,繼承sqldatasource控件並允許引用該方法。我有一種預感,在SqlDataSourceView.Name(公物)可能使得以GetView(通話),這也是一種保護方法。問題是,附加到選擇事件的每個數據源都會返回該屬性的「DefaultView」......我不確定是否有辦法使SqlDataSource的視圖名稱唯一... – MrBoolJIT 2011-03-11 03:07:58

0

這是一個有點hackish,但它的作品。爲每個SqlDataSources提供一個具有相同名稱但不同的默認值的未使用的SelectParameter。比如,我們可以有:

<asp:Parameter DefaultValue="Value1" Name="sdsName" Type="String" /> 

而另一位可能有:

<asp:Parameter DefaultValue="Value2" Name="sdsName" Type="String" /> 

然後在選擇時,你可以做這樣的事情:

switch (e.Command.Parameters["@sdsName"].Value.ToString()) 
    { 
     case "Value1": 
      //Do something! 
      break; 
     case "Value2": 
      //Do something! 
      break; 
    } 

在這裏希望有人有更好的解。

相關問題