[英]Excel VSTO ribbon DropDownItem index to -1
我在自定義Exel功能區中有幾個VSTO功能區組合框。 我遇到的兩個組合框是CBO.Division和CBO.Category。 我有Division_ItemsLoading方法來執行數據庫查詢,並用結果填充除法組合框。
CBO_Division_TextChanged具有一個查詢,該查詢返回所有類別項目,並將除法組合框中的所選文本用作其查詢的一部分
並非所有的部門都有一個類別,我需要知道在選擇新部門時如何從類別組合框中清除當前選定的項目。 這是如何完成的?
到目前為止,這是我的代碼:
#region ComboBox: Division
private void cbo_Division_ItemsLoading(object sender, RibbonControlEventArgs e) //cbo_Division
{
cbo_Division.Items.Clear();
try
{
using (con = new SqlConnection(CS))
{
using (cmd = new SqlCommand(@"SELECT DISTINCT SUBSTRING(groupname, CHARINDEX('_', Groupname) + 1,
CHARINDEX('/', groupname) - 1 - CHARINDEX('_', Groupname))
FROM groups where Groupname like @division;", con))
{
con.Open();
cmd.Parameters.AddWithValue("@division", "Approvers.CCB%");
using (rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var rddi = this.Factory.CreateRibbonDropDownItem();
rddi.Label = rdr[0].ToString();
cbo_Division.Items.Add(rddi);
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rdr.Close();
con.Close();
}
}
private void cbo_Division_TextChanged(object sender, RibbonControlEventArgs e)
{
cbo_Category.Items.Clear();
try
{
//Clear all approvers
XLS_RemoveStakeHolders.RemoveApprovers();
using (con = new SqlConnection(CS))
{
using (cmd = new SqlCommand(@"select RIGHT(groupname, len(groupname) - charindex('/',Groupname))
FROM groups where Groupname like @division ORDER BY groupName;", con))
{
con.Open();
cmd.Parameters.AddWithValue("@division", "Approvers.CCB_" + cbo_Division.Text + "%");
using (rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var rddi = this.Factory.CreateRibbonDropDownItem();
rddi.Label = rdr[0].ToString();
cbo_Category.Items.Add(rddi);
}
}
}
}
XLS_RangeData division = new XLS_RangeData(cbo_Division.Text);
division.SetDivision();
XLS_RangeData category = new XLS_RangeData(cbo_Category.Text);
category.SetCategory();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
rdr.Close();
con.Close();
}
}
#endregion
您需要在分區組合框的change事件上使類別組合框無效。 此方法將觸發重新加載類別combox框的源。
public void OnChange(Office.IRibbonControl control, string text)
{
try
{
switch (control.Id)
{
case "cbo_Division":
ribbon.InvalidateControl("cbo_Category");
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Unexpected Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
這是on change事件的XML示例。
<comboBox
id="cbo_Division"
label="Division: "
onChange="OnChange"
getText="GetLabelText"
getItemCount="GetItemCount"
getItemLabel="GetItemLabel"
sizeString= "XXXXXXXXXXXXXXXXXXXX"
screentip="Division Name"
supertip="This is the Division name."
/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.