2013-12-17 3 views
0

Например, у меня есть запись о викторинах. Я хочу показать все викторины вместе со студентом, который его взял. Если общее количество викторинов равно 20, то список-список будет динамически добавлять еще один столбец в список. Как я могу это сделать? Кроме того, я хочу, чтобы в первом столбце списка отображалось имя ученика.Как я могу установить количество столбцов в виде списка динамически?

Вот как я вручную добавляю элементы в столбец.

listView1.Items.Clear(); 
conek.OPEN("Select * from thesisdb.teachers where username='"+txts+"'"); 
while(conek.reader.Read()){ 
     ListViewItem ni = new ListViewItem(conek.reader[0].ToString()); 
     ni.SubItems.Add(conek.reader[1].ToString()); 
     ni.SubItems.Add(conek.reader[2].ToString()); 
     ni.SubItems.Add(conek.reader[3].ToString()); 
     ni.SubItems.Add(conek.reader[4].ToString()); 
     ni.SubItems.Add(conek.reader[5].ToString()); 
     ni.SubItems.Add(conek.reader[6].ToString()); 
     ni.SubItems.Add(conek.reader[7].ToString()); 
     ni.SubItems.Add(conek.reader[8].ToString()); 
     ni.SubItems.Add(conek.reader[9].ToString()); 
     listView1.Items.AddRange(new ListViewItem[] { ni }); 
} 
conek.CLOSE(); 

Я попытался использовать цикл for для количества элементов для считывателя, но он, похоже, не работает.

Этот класс был предоставлен нашим инструктором, и это то, что мы используем с тех пор, как мы начали с C#.

namespace spms.classes 
{ 
public class clsOpenCon 
{ 
    public static string connectionAddress = "uid=root; database=thesisdb;"; 
    public static MySqlConnection CN = new MySqlConnection(classes.clsOpenCon.connectionAddress); 

    public MySqlCommand Com = new MySqlCommand(); 
    public MySqlDataReader reader; 

    public void nonQuery(string cmdText) 
    { 
    Com.Connection = CN; 
    CN.Open(); 
    Com.CommandText = cmdText; 
    Com.ExecuteNonQuery(); 
    Com.Dispose(); 
    CN.Close(); 
    } 
    public void OPEN(string cmdtext) 
    { 
    Com.Connection = classes.clsOpenCon.CN; 
    classes.clsOpenCon.CN.Open(); 
    Com.CommandText = cmdtext; 
    reader = Com.ExecuteReader(); 
    } 
    public void CLOSE() 
    { 
    reader.Close(); 
    Com.Dispose(); 
    classes.clsOpenCon.CN.Close(); 
    } 
    } 
    } 

ответ

2

Вы можете найти его проще использовать DataGridView и использовать DataTable, чтобы заполнить его автоматически, как это:

dataGridView.DataSource = conek.ExecuteQuery("Select * from thesisdb.teachers where username='"+txts+"'"); 

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

internal DataTable ExecuteQuery(string query) 
{ 
    DataTable table = new DataTable(); 

    var refDataAdapter = new MySqlDataAdapter(new MySqlCommand(query, SqlConn)); 
    refDataAdapter.Fill(table); 

    return table; 
} 

Но ответьте на свой вопрос, вам нужно добавить столбцы самостоятельно, позвонив listview1.Columns.Add перед тем, как добавить товар.

В дополнение к вашему вопросу вы не должны вставлять текст в свой запрос, например txts, но вместо этого используете parameters, чтобы избежать атаки SQL-инъекции.

+0

Я по-прежнему новичок в C#, и раньше я не использовал datagridview. делает ли логика добавление подпунктов и диапазонов позиций в список? –

+0

Datagridview сделает все для вас - все, что вы делаете, это передать ему DataTable - эта строка, на которую я положил свой ответ, - это все, что вам нужно! Он получит имена столбцов и добавит их для вас. Возможно, вы захотите установить немного форматирования в GUI-дизайнере, чтобы он выглядел так, как вам хочется, - вы можете сделать их похожими на список. Если вы хотите сделать это вручную, лучше всего придерживаться списка, вероятно - datagridview лучше всего подходят для автоматического пути! – noelicus

+0

, поэтому мне просто нужно создать таблицу данных, в которой я должен записывать свои SQL-инструкции, а затем использовать таблицу данных для datagridview для отображения данных? –

Смежные вопросы