如何动态设置列表视图中的列数?

时间:2013-12-17 10:59:19

标签: c# winforms listview

例如,我有一个测验记录。我想要显示所有测验以及接受它的学生。如果测验总数为20,则列表视图将动态地将另一列添加到列表视图中。我怎样才能做到这一点?另外,我希望list-view的第1列显示学生的姓名。

这是我手动将项目添加到列的方式。

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();
    }
    }
    }

1 个答案:

答案 0 :(得分: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注入攻击。