Моя база данных состоит из таблицы вопросника для хранения вопросов и таблицы выбора для хранения параметров, связанных с соответствующим вопросом. Я успешно смог отобразить их в иерархической структуре, используя TreeView вместе с флажками. Но не в состоянии вернуть тот, который проверен. Может ли кто-нибудь, пожалуйста, помогите.
Я пробовал много способов, но не повезло. Я попробовал код ниже, чтобы просто отобразить сообщение со значениями.
foreach (TreeNode node in treeView1.Nodes)//.CheckedNodes)
{
//TreeNodeCollection Child = ;
MessageBox.Show(node.TreeView.Nodes.ToString());
if (node.IsSelected)
MessageBox.Show(node.Text + " " + node.Tag + "\\n");
//message += node.Text + " " + node.Tag + "\\n";
}
private void Load_CloseEnded_Questions()
{
treeView1.Nodes.Clear();
con = new OleDbConnection();
treeView1.CheckBoxes = true;
con.ConnectionString = GlobalClass.GlobalVar;
TreeNode child;
try
{
OleDbCommand cmd = new OleDbCommand();
OleDbCommand cmd2 = new OleDbCommand();
cmd.Connection = con;
cmd2.Connection = con;
con.Open();
//SQL Query to retrive questions
cmd.CommandText = "SELECT q2.questionText, q2.questionId, q2.sequenceNo, q2.questionType FROM questions q2 WHERE q2.sequenceNo <( SELECT q1.sequenceNo FROM questions q1 WHERE q1.questionId = " + QUESTIONID + " ) and q2.questionType = \"Close Ended\" ORDER BY q2.sequenceNo;";
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
//Store questions from database to Tree Parent nodes
TreeNode parent = new TreeNode
{
Text = dr[0].ToString(),
Tag = Convert.ToInt32(dr[1])
};
//SQL Query to retrive options associated to the question
cmd2.CommandText = "SELECT choices.choiceName, choices.choiceId FROM ((questions INNER JOIN parameter ON questions.parameterId = parameter.parameterId) INNER JOIN choices ON parameter.parameterId = choices.parameterId) WHERE (questions.questionId = " + Convert.ToInt32(dr[1]) + ")";
OleDbDataReader dr2 = cmd2.ExecuteReader();
if (dr2.HasRows)
{
while (dr2.Read())
{
//Store the options from database to Child Node
child = new TreeNode
{
Text = dr2[0].ToString(),
Tag = Convert.ToInt32(dr[1])
};
TreeNode node1 = new TreeNode();
child.Checked = false;
parent.Nodes.Add(child);
}
treeView1.Nodes.Add(parent);
dr2.Close();
}
}
}
else
{
MessageBox.Show("No Questions were found.", "STAR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
treeView1.Enabled = false;
}
dr.Close();
con.Close();
con.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("" + ex, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
con.Dispose();
con.Close();
}
}
I expected to retrive the nodes values(text and tag) those are checked