Несколько данных в gridview - PullRequest
0 голосов
/ 21 мая 2011

Я столкнулся с новой проблемой.

Я хочу выбрать каждого участника в моей базе данных с statusID выше, чем у текущего пользователя.Для каждого из этих членов я хочу, чтобы в моем виде сетки отображались заполненные модели.

Это означает, что мне придется повторить 1 запрос SELECT для каждого члена, обнаруженного с statusID выше, чем у текущего пользователя.

Для заполнения моего вида сетки я использую программный код за ASPX (C #).Насколько я знаю, за один раз я могу ввести только 1 SQL-запрос в сетку.

Есть ли способ показать все эти записи в 1 сетке?Как и FE для каждого пользователя, он просто добавляет новые данные в сетку вместо их замены?

Вот код, который я получил до сих пор:

            int statushelp = int.Parse(statusid);

            SqlCommand cmd = new SqlCommand("SELECT COUNT (*) FROM Login WHERE Status_ID > " + statushelp + " ", con);
            int aantal = (int)cmd.ExecuteScalar();

            string[] onderdanen = new string[aantal];
            int teller = 0;

            SqlCommand cmd1 = new SqlCommand("SELECT User_ID FROM Login WHERE Status_ID > " + statushelp + " ", con);
            dr = cmd1.ExecuteReader();

            while (dr.Read()) 
            {
                onderdanen[teller] = dr["User_ID"].ToString();
                teller++;
            }

            dr.Close();
            string onderdaan;
            teller = 0;

            while (teller < onderdanen.Length) 
            {
                onderdaan = onderdanen[teller].ToString();

                SqlCommand cmd2 = new SqlCommand("SELECT M.Mod_ID AS Modelnr, M.Mod_Naam AS Modelnaam, M.Mod_Omschrijving AS Omschrijving, M.Taal_Id, M.User_ID FROM Toewijzing T, Model M WHERE T.User_ID = '" + onderdaan + "' AND T.Toe_Status = '" + "ja" + "' AND M.Mod_ID = T.Mod_ID", con);
                dr = cmd2.ExecuteReader();
                Debug.WriteLine(dr["M.Mod_ID"].ToString());
                gvModelAdmin.DataSource = dr;
                gvModelAdmin.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                gvModelAdmin.DataBind();
                dr.Close();
                teller++;

            }

Действительно, любая помощьдобро пожаловать, у меня нет абсолютно никакой подсказки, как это сделать ..

1 Ответ

2 голосов
/ 21 мая 2011

Два возможных способа, которыми я могу придумать:

1: Уровень SQL (будет лучшим, и я не знаю, как): я считаю, что вы можете сделать все это за один вызов БД. Может быть сложный SP, но эксперт по SQL может указать вам правильное направление.

2: C # Кодирование: Вот что вам нужно сделать:

2a: Создайте простой класс C #, свойства которого сопоставляются с полями, возвращенными из вашего последнего запроса в цикле. то есть Modelnr, Modelnaam и т. д. Скажем, вы назвали его MyModelClass.

public class MyModelClass{

public string Modelnr {get;set;} //set the type of property according to the datatype of DB field

public string Modelnaam{get;set;}
...other properties
}

2b: Затем измените ваш код следующим образом:

List<MyModelClass> mmcList = new List<MyModelClass>();
while (teller < onderdanen.Length){
onderdaan = onderdanen[teller].ToString();
SqlCommand cmd2 = new SqlCommand("SELECT M.Mod_ID AS Modelnr, M.Mod_Naam AS Modelnaam, M.Mod_Omschrijving AS Omschrijving, M.Taal_Id, M.User_ID FROM Toewijzing T, Model M WHERE T.User_ID = '" + onderdaan + "' AND T.Toe_Status = '" + "ja" + "' AND M.Mod_ID = T.Mod_ID", con);
dr = cmd2.ExecuteReader(); 
if(dr!=null && dr.HasRows){
MyModelClass mmcObj= new MyModelClass();
dr.Read();
mmcObj.Modelnr = dr["Modelnr"].ToString(); //Modelnr is String property in MyModelClass
mmcObj.Modelnaam= dr["Modelnaam"].ToString();//Modelnaam is a String prop in MyModelClass
...///so on other properties

mmcList.Add(mmcObj);
}
dr.Close();                 
teller++;
} 
gvModelAdmin.DataSource = mmcList; //set gv datasourc to the list on myModelClass
gvModelAdmin.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
gvModelAdmin.DataBind(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...