2013-06-27 7 views
0

Я работаю с gridview в C#, и мне интересно, есть ли эффективный способ использования одного источника данных вместо трех. Прямо сейчас у меня есть оператор if, который выбирает источник данных, основанный на значении в выпадающем списке ddlType.Cycle Through Sql Columns

if (ddlType.Text == "Confirmation") 
    gvMailMergeExport.DataSourceID = "SqlDSConfirmation"; 
else if (ddlType.Text == "Cancellation") 
    gvMailMergeExport.DataSourceID = "SqlDSCancellation"; 
else 
    gvMailMergeExport.DataSourceID = "SqlDSPreArrival"; 

Поскольку каждая База данных должна искать другой столбец в той же таблице, чтобы определить, какие данные следует показывать. Три используемых столбца: ConfirmationEmail, CancellationEmail и PreArrivalEmail. Каждый из этих трех столбцов является битовым значением, и я показываю только строки, в которых правильный столбец имеет значение «0» для его значения. Итак, вопрос: есть ли что-то вроде @ColumnName = 0, которое будет работать для этого? Спасибо.

ответ

1

Я никогда не использовал SQLDataSources, но если вы хотите идти больше пользовательского маршрут, вы можете создать свой запрос (или используйте LINQ для SQL или LINQ к Entity Framework) с пунктом пользовательского where на основе выбор пользователя.

С какой технологией вы больше знакомы? LINQ было бы лучше, но я могу дать ответ в ADO.NET (SqlConnection, SqlCommand и т. Д.).

Таким образом, LINQ будет относительно простым. После настройки LINQ to Entities (EDMX) или LINQ to SQL (DBML) (я бы сделал EDMX, потому что L2S больше не поддерживается в прямом обслуживании MSFT). С существующей БД, это очень легко, перетащить.

код будет выглядеть следующим образом:

using(var context = new LinqDbContext()) 
{ 
    var results = context.Tablename; 
    if(limitByConfEmail) 
    { 
     results = results.Where(data => data.ConfirmationEmail == true); 
    } 
    // do your elses here 

    gridview.DataSource = results; 
    gridview.DataBind(); 
} 
+0

Честно говоря, я неопытный со всем. Я медленно вычислял SQL за последний месяц. Итак, давайте попробуем LINQ. – Austin

+0

обновил мой ответ с помощью решения LINQ –