如何在C#中创建主细节组合框?

时间:2015-04-28 02:58:26

标签: c# asp.net excel combobox oledb

我有一张excel表test.xlsx,两张

工作表名称:Product1包含以下数据:

ID  ParentID    Title
1   0           P1_1
2   0           P1_2

工作表名称:Product2包含以下数据:

ID  ParentID    Title
1   1           P2_1
2   1           P2_2
3   1           P2_3
4   1           P2_4
5   2           P2_5
6   2           P2_6

在asp.net(C#)中将WindowsFormsApplication中的两个工作表调用为:

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test.xlsx" + @";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";

/////////////////////////////////////////////////////

OleDbCommand command1 = new OleDbCommand
(
"SELECT ID ,ParentID ,Title " +
" FROM [Product1$]", conn
);
DataSet ds1 = new DataSet();
OleDbDataAdapter adaptor1 = new OleDbDataAdapter(command1);
adaptor1.Fill(ds1);
Product1.DataSource = ds1.Tables[0];
Product1.ValueMember = "ID";
Product1.DisplayMember = "Title";

/////////////////////////////////////////////////////

OleDbCommand command2 = new OleDbCommand
(
"SELECT ID  ,ParentID ,Title " +
" FROM [Product2$] " , conn
);
DataSet ds2 = new DataSet();
OleDbDataAdapter adaptor2 = new OleDbDataAdapter(command2);
adaptor2.Fill(ds2);
Product2.DataSource = ds2.Tables[0];
Product2.ValueMember = "ID";
Product2.DisplayMember = "Title";

我需要知道如何在两个组合框中创建主 - 细节(父 - 子)关系,以便当第一个组合框值更改时,第二个组合框值也反映出由ParentID字段更改。

1 个答案:

答案 0 :(得分:0)

您可以通过选择当前选定的值从combobox1中选择项目时触发事件来执行此操作。根据选定的值从sheet2获取数据并填充第二个组合框。

<asp:ListBox ID="Product1" OnSelectedIndexChanged="Product1_SelectedIndexChanged" runat="server" AutoPostBack="true"></asp:ListBox>

CS代码

int Id = 0;
int.TryParse(Product1.SelectedValue, out Id);

现在根据这个id来获取来自sheet2的数据

OleDbCommand command2 = new OleDbCommand
(
"SELECT ID  ,ParentID ,Title " +
"FROM [Product2$] Where ParentId=@parentID" , conn
);
command2.Parameters.AddWithValue("@parentID", Id);

其他用于biniding的代码将是相同的。