2013-12-15 3 views
0

Im пытается добавить все учетные записи моих пользователей в gridview, но при использовании кода foreach он добавляет последнее значение datagridview. Есть ли способ сделать все это?Datagridview добавляет только 1 строку

public DataTable GetResultsTable(string Username) 
{ 
    using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) 
    { 
     DataRow row = client.ExecuteQueryRow("SELECT * FROM users WHERE username = '" + Username + "'"); 
     DataTable table = new DataTable(); 
     table.Columns.Add("Username".ToString()); 
     table.Columns.Add("Motto".ToString()); 
     table.Columns.Add("Email".ToString()); 
     table.Columns.Add("Homeroom".ToString()); 
     table.Columns.Add("Health".ToString()); 
     table.Columns.Add("Energy".ToString()); 
     table.Columns.Add("Age".ToString()); 
     DataRow dr = table.NewRow(); 
     dr["Username"] = "" + row["username"] + ""; 
     dr["Motto"] = "" + row["motto"] + ""; 
     dr["Email"] = "" + row["mail"] + ""; 
     dr["Homeroom"] = "" + row["home_room"] + ""; 
     dr["Health"] = "" + row["health"] + ""; 
     dr["Energy"] = "" + row["energy"] + ""; 
     dr["Age"] = "" + row["age"] + ""; 
     table.Rows.Add(dr); 
     return table; 
    } 
} 
SqlDatabaseManager.Initialize(); 
    using (SqlDatabaseClient client = SqlDatabaseManager.GetClient()) 
    foreach (DataRow row2 in client.ExecuteQueryTable("SELECT * FROM users").Rows) 
    { 
     dataGridView1.DataSource = GetResultsTable((string)row2["username"]); 
    } 
+0

Спараметрировать ваши запросы. Это большой нет-нет: '' SELECT * FROM users WHERE username = '"+ Username +"' "'. См. Здесь, почему: http://stackoverflow.com/questions/5468425/how-do-parameterized-queries-help-against-sql-injection –

ответ

0

Свойство DataSource объекта DataGridView не должно быть одной строки, но многих. Таким образом, вы можете изменить свой код, чтобы создать список первым и применять его в качестве источника данных, или использовать следующий метод:

dataGridView1.Rows.Add(GetResultsTable(row2["username"].ToString()); 

В цикле Еогеаспа.

Надеюсь, что это поможет вам :).

+0

У меня есть ошибка при использовании вашего кода. есть ли какое-то простое исправление? Необработанное исключение типа «System.InvalidOperationException» произошло в System.Windows.Forms.dll Дополнительная информация: Никакой ряд не может быть добавлен в элемент управления DataGridView, который не имеет столбцов. Сначала нужно добавить столбцы. – Fernando

0

вы можете использовать один метод для загрузки данных

public DataTable fillDataTable() 
{ 
    // select all the columns with expected column name, here I only added 3 columns 
    string query = "SELECT username as Username, motto as Motto, mail as Email FROM users; 

    using(SqlConnection sqlConn = new SqlConnection(conSTR)) 
    using(SqlCommand cmd = new SqlCommand(query, sqlConn)) 
    { 
     sqlConn.Open(); 
     DataTable dt = new DataTable(); 
     dt.Load(cmd.ExecuteReader()); 
     return dt; 
    } 
} 

устанавливается сетка DataSource, как показано ниже

dataGridView1.DataSource =fillDataTable(); 
Смежные вопросы