在数据输入时,我们经常会遇到级联数据输入的问题,比如:在选择一个产品类别之后,根据类别显示该类别的全部产品。本文就结合 ComboBoxCellType 来实现级联数据输入的功能。
实现,初始化Spread表格,并设置类别列的单元格类型,代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FpSpread1.ClientAutoCalculation = true;
FpSpread1.ActiveSheetView.AllowPage = false;
FpSpread1.ActiveSheetView.RowCount = 10;
FpSpread1.ActiveSheetView.ColumnCount = 6;
FpSpread1.ActiveSheetView.Columns[0].Label = "类别";
FpSpread1.ActiveSheetView.Columns[0].Width = 150;
FpSpread1.ActiveSheetView.Columns[1].Label = "名称";
FpSpread1.ActiveSheetView.Columns[1].Width = 300;
FpSpread1.ActiveSheetView.Columns[2].Label = "单价";
FpSpread1.ActiveSheetView.Columns[2].Width = 100;
FpSpread1.ActiveSheetView.Columns[3].Label = "数量";
FpSpread1.ActiveSheetView.Columns[3].Width = 100;
FpSpread1.ActiveSheetView.Columns[4].Label = "折扣";
FpSpread1.ActiveSheetView.Columns[4].Width = 100;
FpSpread1.ActiveSheetView.Columns[5].Locked = true;
FpSpread1.ActiveSheetView.Columns[5].Label = "小计";
FpSpread1.ActiveSheetView.Columns[5].Width = 200;
FpSpread1.ActiveSheetView.Columns[5].Formula = "C1 * D1 * E1";
FpSpread1.ActiveSheetView.Columns[5].CellType = new CurrencyCellType();
// 指定产品类别列的CellType
DataSet ds = GetDataSource();
FarPoint.Web.Spread.ComboBoxCellType ctCategory = new FarPoint.Web.Spread.ComboBoxCellType();
ctCategory.DataSource = ds;
ctCategory.DataMember = "Category";
ctCategory.DataTextField = "Name";
ctCategory.DataValueField = "ID";
ctCategory.UseValue = true;
ctCategory.OnClientChanged = "return CategoryChanged();";
FpSpread1.ActiveSheetView.Columns[0].CellType = ctCategory;
}
}
前台 CategoryChanged 函数的实现代码:
<script type ="text/javascript" language="javascript">
function CategoryChanged() {
var row = FpSpread1.ActiveRow;
var col = FpSpread1.ActiveCol;
FpSpread1.EndEdit();
FpSpread1.UpdatePostbackData();
FpSpread1.CallBack("CategoryChanged," + row.toString() + "," + col.toString());
}
</script>
Spread ButtonCommand事件的后台处理代码,我们在该事件中取到选择的类别,然后显示该列的全部产品:
/// <summary>
/// Spread ButtonCommand 事件的处理函数,根据e.CommandName的值来决定相应的处理逻辑
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
switch (e.CommandName)
{
case "CategoryChanged":
// 取到选择的产品类别,作为产品名称列的查询条件
Point cell = (Point)e.CommandArgument;
int categoryid = Convert.ToInt32(this.FpSpread1.ActiveSheetView.Cells[cell.X, cell.Y].Value.ToString());
// 指定产品列相应单元格的CellType
DataSet ds = GetDataSource();
DataView product = ds.Tables["Products"].DefaultView;
product.RowFilter = string.Format("CategoryID = {0}", categoryid);
ComboBoxCellType ctProduct = new FarPoint.Web.Spread.ComboBoxCellType();
ctProduct.DataSource = product;
ctProduct.DataTextField = "Name";
ctProduct.DataValueField = "ID";
ctProduct.UseValue = true;
FpSpread1.ActiveSheetView.Cells[cell.X, cell.Y + 1].CellType = ctProduct;
break;
default:
break;
}
}
运行截图:
源码下载:
