例如,我有一个测验记录。我想要显示所有测验以及接受它的学生。如果测验总数为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();
}
}
}
答案 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注入攻击。