循环访问数据表中的特定列值

时间:2014-04-03 05:48:05

标签: c# sql

我有一个winform应用程序,其中我有一个要求读取由条件指定的特定列值。

这是我的C#代码

SqlCommand anc = new SqlCommand(); ;
                anc.Connection = ad;
                string s = "Sixth";
                anc.CommandText = "Select Sub_Name from Subs_Master where Semester =@Sixth ";
                anc.Parameters.AddWithValue("@Sixth", s);
                anc.ExecuteNonQuery();
               // SqlDataReader anw = anc.ExecuteReader();
                SqlDataAdapter al = new SqlDataAdapter(anc);
                DataSet dts = new DataSet();
                al.Fill(dts);
                DataTable dt = dts.Tables[0];
                dataGridView1.DataSource = dt;
                label9.Text = "Sixth";


foreach (DataRow drow in dt.Rows)
                {
                foreach (DataColumn Sub_Name in dt.Columns)
                {
                    //
                    //{
                    radioButton3.Text = (drow[Sub_Name.ColumnName].ToString());
                    radioButton4.Text = (drow[Sub_Name.ColumnName].ToString());
                    radioButton5.Text = (drow[Sub_Name.ColumnName].ToString());
                    radioButton6.Text = (drow[Sub_Name.ColumnName].ToString());
                    radioButton7.Text = (drow[Sub_Name.ColumnName].ToString());
                    radioButton8.Text = (drow[Sub_Name.ColumnName].ToString());
}

这是对msdn演练的参考。

这是我的表格 data backend

现在我的问题是,当我只运行该列的最后一个值,即CA显示在所有单选框上时,但我希望每个单选框应该包含6个不同的值,例如radio3应该是Java ,收音机4应该是CIMD,收音机5应该是网络.. 有办法吗?或者我的查询错了。??

感谢你提前帮助..

5 个答案:

答案 0 :(得分:1)

这是因为您为每一行设置了Text的每个RadioButton。最后,每个RadioButton将显示分配的最后一个值,它来自每个值的最后一行。

您需要做的就是为每一行设置一个RadioButton Text属性,每次都需要不同的RadioButton。要么只是长时间写出来,要么如果你想使用循环,将RadioButton放在数组/集合中,然后使用for循环而不是foreach循环。这样,您可以使用循环计数器作为RadioButton列表和Rows的{​​{1}}的索引。

顺便说一句,摆脱那个内循环。它没有任何意义。您只使用一列中的数据,那么为什么要遍历所有列?

答案 1 :(得分:1)

不要做一个foreach。通过循环,您将每个单选按钮设置为第一个值,然后是第二个,然后是第三个..直到最后一个值。您想要使用索引。

这样的事情:

radioButton3.Text = dt.Rows[0]["SubName"] 
radioButton4.Text = dt.Rows[1]["SubName"] 
radioButton5.Text = dt.Rows[2]["SubName"] 

正如@jmcilhinney所说,你的第二个foreach是没用的。摆脱他们两个。

答案 2 :(得分:0)

您正在设置具有相同值的所有单选按钮。尝试这样的事情。

int counter = 1;
foreach (DataRow drow in dt.Rows)
 { 
     switch (counter)
    {
        case 1:
            radioButton3.Text = drow["Sub_Name"].ToString();
            break;
        case 2:
            radioButton4.Text = drow["Sub_Name"].ToString();
            break;
        default:
            break;
    }

    counter++;
 }

答案 3 :(得分:0)

您还可以通过

访问每个数据行的项目数组
DataTable dt = new DataTable();
foreach(DataRow row in dt.Rows)
{
    foreach(var cell in row.ItemArray)
    {
    }
}

答案 4 :(得分:0)

                radioButton3.Text = dt.Rows[0]["Sub_Name"].ToString();
                radioButton4.Text = dt.Rows[1]["Sub_Name"].ToString();
                radioButton5.Text = dt.Rows[2]["Sub_Name"].ToString();
                radioButton6.Text = dt.Rows[3]["Sub_Name"].ToString();
                radioButton7.Text = dt.Rows[4]["Sub_Name"].ToString();
                radioButton8.Text = dt.Rows[5]["Sub_Name"].ToString();