Как получить datasourceID источника данных, который запускает событие onSelecting? - PullRequest
1 голос
/ 11 марта 2011

У меня есть пара разных sqldatasources на странице asp.net, которые все запускают один и тот же обработчик событий.Причина этого заключается в том, что один и тот же код в обработчике событий может быть применен ко всем источникам данных (которые по сути генерируют фильтры в запросах динамически).Тем не менее, теперь у меня есть другой источник данных, который все еще может использовать большую часть кода, но должен обрабатываться немного иначе.Я мог бы сделать это очень легко, если бы мог сослаться на идентификатор источника данных, который запускает событие (которое я пробовал), но это не представляется возможным.Вот что я изначально пытался сделать:

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 возвращает ноль.Итак, я изменил его на 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, но это нечто другое.Кто-нибудь знает, возможно ли получить идентификатор источника данных, запускающего событие Selecting при обработке этого события?Если да, можете ли вы привести пример, как это сделать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

Это немного глупо, но работает. Присвойте каждому из 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;
    }

Здесь мы надеемся, что у кого-то есть лучшее решение.

0 голосов
/ 11 марта 2011

Я не пробовал этого, но у SqlDataSource есть метод GetViewNames () , и, возможно, вы можете получить ViewNames ваших источников данных и проверить, какой из них имеет текущий SqlDataSourceView.Name.

...