Я рефакторинг кода для коллеги. Данная программа обращается к базе данных SQL и использует хранимые процедуры для извлечения различных наборов данных. В Visual Studio есть настройка текстового контекста данных, поэтому все эти хранимые процедуры могут быть доступны через файл designer.cs. Результаты выглядят так, как будто они возвращаются как объекты различного типа (например, StoredProcAResult, StoredProcBResult) и т. Д. *
В любом случае, мне вообще запрещено изменять базу данных SQL, но я могу связываться с файлами ASPX и CS. в настоящее время есть три файла, которые выполняют почти идентичные функции (отображая набор данных). Каждая страница вызывает свою хранимую процедуру - скажем, ViewNewProducts, ViewAgedProducts, ViewExpiredProducts. Представление идентично, поэтому я хочу свернуть эти три страницы в одну.
Если бы я мог коснуться SQL, я бы переписал сохраненный процесс, чтобы принять параметры и вернуть правильные данные. Однако я не могу - поэтому я создал один файл ASPX / CS, установил переменную для набора данных, который нужен пользователю (новый, состаренный или просроченный), и теперь я имею дело с этой строкой:
Utility.EnhanceGrid(dataBoundItem.Cells, dataSet.salesperson, dataSet.sku);
Проблема заключается в настройке набора данных. Оригинальные отдельные файлы просто использовали что-то вроде:
var dataSet = (INVENTORY.ViewExpiredProductsResult)dataBoundItem.DataItem;
Но теперь я не знаю, какой хранимый процесс будет вызываться, пока пользователь не выберет.
Я пытался использовать оператор switch, но я не могу объявить var как null ... Я не могу напечатать переменную ... Есть ли способ использовать строковое значение для установки типа var
У меня есть обходной путь с этим кодом, но я ненавижу повторяться, и это выглядит ужасно неряшливо ... любой совет был бы оценен.
switch (usersSelection())
{
case "New":
ViewNewProductsResult newResult = (INVENTORY.ViewNewProductsResult)dataBoundItem.DataItem;
Utility.EnhanceGrid(dataBoundItem.Cells, newResult.salesperson, newResult.sku);
break;
case "Aged":
ViewAgedProductsResult agedResult = (INVENTORY.ViewAgedProductsResult)dataBoundItem.DataItem;
Utility.EnhanceGrid(dataBoundItem.Cells, agedResult.salesperson, agedResult.sku);
break;
case "Expired":
ViewExpiredProductsResult expiredResult = (INVENTORY.ViewExpiredProductsResult)dataBoundItem.DataItem;
Utility.EnhanceGrid(dataBoundItem.Cells, expiredResult.salesperson, expiredResult.sku);
break;
}