找回密码
 立即注册

QQ登录

只需一步,快速开始

sliang79

高级会员

26

主题

66

帖子

1764

积分

高级会员

积分
1764

活字格认证

sliang79
高级会员   /  发表于:2011-6-8 14:17  /   查看:17913  /  回复:26
一行中放了两个combobox,数据源为sql一个table中的两列:
col1   col2
a       a1
a       a2
a       a3
b       b1
b       b2
...      ...
如何实现第一个combobox选了a之后第二个combobox下拉只有a1,a2,a3?

26 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-6-9 10:14:00
沙发
你好,你可以在Page_Load事件中加载第一个ComboBox的数据,在FpSpread1_UpdateCommand事件中得到第一个ComboBox选择的值并加载第二个ComboBox的值

protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
return;

DataTable dt1 = new DataTable();
dt1.Columns.AddRange(
new DataColumn[] {
new DataColumn("ID", typeof(string)),
new DataColumn("Name", typeof(string))});

dt1.Rows.Add(new object[] { 1, "Item1" });
dt1.Rows.Add(new object[] { 2, "Item2" });
dt1.Rows.Add(new object[] { 3, "Item3" });

FarPoint.Web.Spread.ComboBoxCellType cmbbx = new FarPoint.Web.Spread.ComboBoxCellType();

cmbbx.ShowButton = true;
cmbbx.AutoPostBack = true;
cmbbx.DataSource = dt1;
cmbbx.DataTextField = "Name";
cmbbx.DataValueField = "ID";
cmbbx.UseValue = true;
FpSpread1.ActiveSheetView.Columns[0].CellType = cmbbx;

}

protected void FpSpread1_UpdateCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
if (e.SheetView.ActiveColumn == 0 && e.CommandArgument.ToString().Equals(FpSpread1.Sheets[0].ActiveRow.ToString()))
{
DataTable dt2 = new DataTable();
dt2.Columns.AddRange(
new DataColumn[] {
new DataColumn("MstID", typeof(string)),
new DataColumn("ID", typeof(string)),
new DataColumn("Name", typeof(string))});

dt2.Rows.Add(new object[] { 1, 1, "A" });
dt2.Rows.Add(new object[] { 1, 2, "B" });
dt2.Rows.Add(new object[] { 1, 3, "C" });
dt2.Rows.Add(new object[] { 2, 1, "D" });
dt2.Rows.Add(new object[] { 2, 2, "E" });
dt2.Rows.Add(new object[] { 2, 3, "F" });
dt2.Rows.Add(new object[] { 3, 1, "G" });
dt2.Rows.Add(new object[] { 3, 2, "H" });
dt2.Rows.Add(new object[] { 3, 3, "I" });

FarPoint.Web.Spread.ComboBoxCellType cmbbx = new FarPoint.Web.Spread.ComboBoxCellType();
List<String> list = new List<string>();
foreach (DataRow row in dt2.Select(String.Format("MstID = {0}",e.EditValues[0].ToString())))
{
list.Add(row["Name"].ToString());
}
cmbbx.ShowButton = true;
cmbbx.AutoPostBack = true;
cmbbx.DataSource = list;

FpSpread1.Sheets[0].Cells[e.SheetView.ActiveRow, 1].CellType = cmbbx;
}

}
回复 使用道具 举报
sliang79
高级会员   /  发表于:2011-6-9 11:50:00
板凳
这样做不行,因为spread没有启用ajaxcall,只有点update按钮时才能触发 FpSpread1_UpdateCommand,我又试了使用MultiColumnComboBoxCellType,数据源table有两列,可以在选后把选到的2个数值分别放到当前单元格和右侧单元格吗
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-6-9 12:47:00
地板
附件是我做的一个ComboBox联动的例子,不知道是否能满足你的Case:
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-6-9 12:48:00
5#
附件是我做的一个ComboBox联动的例子,不知道是否能满足你的Case:
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2011-6-9 12:50:00
6#
附件是我做的一个ComboBox联动的例子,不知道是否能满足你的Case:
SpreadWeb.ComboBox.zip (3.84 KB, 下载次数: 834)
回复 使用道具 举报
sliang79
高级会员   /  发表于:2011-6-10 11:13:00
7#
不适合我的情况,还是要谢谢版主
回复 使用道具 举报
gw0506
超级版主   /  发表于:2011-6-10 13:39:00
8#
你可以把你的问题作成demo发给我们。
我们将讨论更有针对性的方案。
回复 使用道具 举报
sliang79
高级会员   /  发表于:2011-6-19 16:55:00
9#
我原来是用的EnableClientScript = false,这种行编辑模式在输入一行数据不能出发updat_command的事件
回复 使用道具 举报
gw0506
超级版主   /  发表于:2011-6-20 11:01:00
10#

回复 9# sliang79 的帖子

那你可以使用client端事件onDataChanged。
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部