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