用于填充ComboBox的c#函数

时间:2019-01-10 14:12:10

标签: c#

我想在ClassProducts.cs文件中创建一个函数,当我调用该函数时,它应该为该ComboBox返回值和标签。

ComboBox控件位于ViewProducts窗体中,而函数位于ClassProducts.cs类中。函数接受1个称为Cat_ID的参数

class ClassProducts
{

    public DataTable FillSubCats(int catID)
        {
            DataTable items = new DataTable();

            SqlCommand cmdFillSubCatL1 = new SqlCommand("SELECT * FROM tblProductCategories WHERE Cat_ParentCat =" + catID, con);

            con.Open();

            SqlDataReader sda = cmdFillSubCatL1.ExecuteReader();
            while (sda.Read())
            {
                ComboboxItem item = new ComboboxItem();
                item.Text = (sda["Cat_Name"]).ToString();
                item.Value = (sda["Cat_ID"]).ToString();

                items.Load(sda);
            }
            sda.Dispose();
            sda.Close();
            con.Close();

            return items;
        }
}

我想要ClassProducts文件中的一个函数,该函数将填充ViewProducts.cs表单中的ComboBoxes。每当调用函数时,都应将组合框项目返回到调用文件。

我已经尝试过此功能,但无法正常工作。

请帮助。 谢谢。

2 个答案:

答案 0 :(得分:0)

这很可能是由于您没有使用sqlparametersCat_ParentCat必须是一个int字段,因此当您尝试将查询与字符串串联一起使用时,就会出现nvarchar字段的猫,并且由于您没有包装catId如果您的查询带有引号,则失败。无论如何使用SQL参数,也将帮助您避免SQL注入。试试:

SqlCommand cmdFillSubCatL1 = new SqlCommand("SELECT * FROM tblProductCategories WHERE Cat_ParentCat =@catId", con);
cmdFillSubCatL1.Parameteres.Add("@catId",SqlDbType.Int).Value=catId;
...

编辑: 在正确评论之后,更好的查询应该是:

"SELECT  Cat_Name,Cat_ID FROM tblProductCategories WHERE Cat_ParentCat =@catId"

最后,由于您要加载DataTable,因此请不要使用Datareader,而是要使用dataAdapter:

...  
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmdFillSubCatL1 ;
adapter.Fill(items );

答案 1 :(得分:0)

如何?我添加了方法FillSubCatsProxy,该方法应该模拟您的方法返回的内容。

public Form1()
{
    InitializeComponent();

    comboBox1.DataSource = FillSubCatsProxy(1);
    comboBox1.DisplayMember = "Cat_Name";
    comboBox1.ValueMember = "Cat_ID";
    comboBox1.SelectedIndexChanged += (s, e) => { MessageBox.Show("Selected:" + comboBox1.SelectedValue); };
}

public DataTable FillSubCatsProxy(int catID)
{
    var dt = new DataTable();
    dt.Columns.Add("Cat_Name");
    dt.Columns.Add("Cat_ID");

    dt.Rows.Add("Fish","1");
    dt.Rows.Add("Jack","2");
    return dt;
}

public DataTable FillSubCats(int catID)
{
    SqlConnection con = new SqlConnection("Somewhere");

    try
    {
        con.Open();
        DataTable items = new DataTable();

        var da = new SqlDataAdapter("SELECT Cat_Name,Cat_ID FROM tblProductCategories WHERE Cat_ParentCat = " + catID, con);
        da.Fill(items);

        return items;
    }
    finally
    {
        con.Close();
    }
}
}