我想在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。每当调用函数时,都应将组合框项目返回到调用文件。
我已经尝试过此功能,但无法正常工作。
请帮助。 谢谢。
答案 0 :(得分:0)
这很可能是由于您没有使用sqlparameters
。 Cat_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();
}
}
}