Проблема здесь в том, что вы заполнили таблицу, добавили ее в нетипизированный набор данных, а затем заполнили набор данных отдельно, что в действительности должно привести к нескольким таблицам в вашем наборе данных.
Либо заполните таблицу, либо заполните набор данных, не оба.Я обычно просто заполняю набор данных.
Сводка из IDbAdapter.Fill(DataSet)
:
Добавляет или обновляет строки в System.Data.DataSet, чтобы они соответствовали тем в источнике данных, используя System.Data.DataSetимя и создает System.Data.DataTable с именем «Таблица».
Попробуйте сначала сократить ваш код до этого:
public DataSet getRecipes(string[] ingArray)
{
string sqlString = "SELECT recipes.Name, Instructions, recipes.Preperation_Time, Author FROM RecipeIngredients" +
" INNER JOIN recipes ON recipes.Recipe_ID = RecipeIngredients.Recipe_ID" +
" INNER JOIN Ingredients ON Ingredients.Ingredient_ID = RecipeIngredients.Ingredient_ID" +
" WHERE ingredients.Name = 'Eggs'";
DataSet recipeDataSet = new DataSet();
openConnection();
dataAdapter = new SqlDataAdapter(sqlString, connectionToDB);
//Fill dataset will create a table with the results
// so you only need this one line:
dataAdapter.Fill(recipeDataSet);
closeConnection();
return recipeDataSet;
}
Вы также можете иметь толькоудалил строку:
dataAdapter.Fill(recipeDataSet);
Чтобы дополнительно проверить свою логику, отладьте это и установите точку останова в ResultsWindow_Load, проверьте результат recipeDataSet.Tables[0]
перед установкой его в качестве источника данных.можно использовать инструменты проверки в VS, чтобы сделать это, установить наблюдение за переменной или использовать непосредственную консоль ...
// Display data in grid view
// Inspect recipeDataSet.Tables[0], make sure there is only 1 table, and it has rows
if (recipeDataSet.Tables.Count() != 1)
throw new ApplicationException("Expected only 1 table in the dataset");
if (recipeDataSet.Tables[0].Rows.Count() == 0)
throw new ApplicationException("no rows found in the data table!");
recipesDataGrid.DataSource = recipeDataSet.Tables[0];
Если есть строки, и сетка все еще не показывает и данные, послеустановив источник данных, вызовите recipesDataGrid.Refresh()
, чтобы заставить его перерисовать, это может быть непросто, если вы не используете и не привязываете менеджеры контекста.
Если строк нет
Если строк нетвернул первое, что нужно проверить, что унаши критерии фильтра верны.Я предполагаю, что вы жестко закодировали предложение WHERE в качестве примера и что ingArray
является массивом ингредиентов для фильтрации.
Пожалуйста, обновите ваше сообщение, чтобы включить пример вашей реализации ingredientArray
в методе _load, и я могу обновить этот код с более полным ответом.
Удалите предложение WHERE из sqlString (просто закомментируйте строку сейчас:
string sqlString = "SELECT recipes.Name, Instructions, recipes.Preperation_Time, Author FROM RecipeIngredients" +
" INNER JOIN recipes ON recipes.Recipe_ID = RecipeIngredients.Recipe_ID" +
" INNER JOIN Ingredients ON Ingredients.Ingredient_ID = RecipeIngredients.Ingredient_ID";
Если в вашей сетке теперь есть данные, значит проблема была в пределах критериев фильтра.
Проверьте строку подключения, убедитесь, что база данных, к которой обращается ваш кодэто та же база данных, в которой вы тестируете. Звучит просто, но легко допустить ошибку.