找回密码
 立即注册

QQ登录

只需一步,快速开始

rkk

银牌会员

14

主题

37

帖子

2749

积分

银牌会员

积分
2749

活字格认证

rkk
银牌会员   /  发表于:2013-4-21 02:11  /   查看:8444  /  回复:5
你好! 請問, 我已設定好 columns(1) =MultiColumnComboBoxCellType , 及有 4 個欄位. 但有以下問題.
1) 如何指定 MultiColumnComboBoxCellType  里的各欄位的名稱? (我用更改 Table 名的方式來更改)
2) 可否指定 MultiColumnComboBoxCellType  里各欄位的寬度?
3) 因有欄位是有 5 個小數位, 但只顯示兩個小數位, 如何顯示所有? (我暫想到的是先轉為文字方式)
4) 因 4 個欄位都要輸出到 fpread1 里的 4 個欄位, 但只有 1 個可以帶出 (不是要再查 Table 來帶出吧?)
以下為部份程式碼:

取得數據
        sqlStr = "SELECT [ProcessName],[ProcessDetail],[BaseTime] as [基本時間],[BasePrice] as [基本價錢] FROM TxBaseDetail "
        Dim sqlCmd As New SqlCommand(sqlStr, sqlConn)
        daTxBase.SelectCommand = sqlCmd
        daTxBase.Fill(ds, "TxBaseDetail")

        rowCount = ds.Tables("TxBaseDetail").Rows.Count
        If rowCount = 0 Then Exit Function


        Dim mcCombo = New CellType.MultiColumnComboBoxCellType()
        mcCombo.ColumnEditName = &quotrocessName"
        mcCombo.DataColumnName = &quotrocessDetail"

        mcCombo.ListResizeColumns = CellType.ListResizeColumns.FitWidestItem   '自動寬度

        mcCombo.ListWidth = 500
        mcCombo.MaxDrop = 8
        mcCombo.DataSourceList = ds.Tables("TxBaseDetail")

        fpSpread1.Columns(1).Editor = mcCombo    'Editor=編輯時才顯示下拉箭咀

5 个回复

倒序浏览
山水
初级会员   /  发表于:2013-4-22 18:04:00
沙发
您好!
MultiColumnComboBoxCellType的Editor实际上是一个Spread control, 设法拿到该Spread control后,您就能像操作Spread control 一样做了。
方法一: 从MultiColumnComboBoxCellType继承,实现自己的MultiColumnComboBoxCellType,重载其StartEditing方法,在该方法中得到Spread Editor control, 并定制之,示例代码如下:

    public class MyMultiColumnComboBoxCellType : MultiColumnComboBoxCellType
    {
        public override void StartEditing(EventArgs e, bool selectAll, bool autoClipboard)
        {
            Control editor = this.SubEditor.GetSubEditorControl();
            FarPoint.Win.Spread.FpSpread fp = editor as FarPoint.Win.Spread.FpSpread;
            fp.ActiveSheet.Columns[0].Label = "Columns0's Label"; //实现1)
            fp.ActiveSheet.Columns[0].Width = 333; //实现2)
            //实现3), 设置小数位数
            NumberCellType num = new NumberCellType();
            num.DecimalPlaces = 10;
            fp.ActiveSheet.Columns[0].CellType = num;

            base.StartEditing(e, selectAll, autoClipboard);
        }
    }

方法二: 增加FpSpread EditModeOn 事件处理器,在其中得到Spread Editor control, 并定制之,示例代码如下:
        public Form1()
        {
            InitializeComponent();
            this.fpSpread1.EditModeOn += fpSpread1_EditModeOn;
        }
        void fpSpread1_EditModeOn(object sender, EventArgs e)
        {
            if (fpSpread1.EditingControl is FarPoint.Win.Spread.CellType.MultiColumnEditor)
            {
                FpSpread fp = ((FarPoint.Win.Spread.CellType.MultiColumnEditor)fpSpread1.EditingControl).SubEditor as FpSpread;
                fp.ActiveSheet.Columns[0].Label = "Columns0's Label"; //实现1)
                fp.ActiveSheet.Columns[0].Width = 333; //实现2)
                //实现3), 设置小数位数
                NumberCellType num = new NumberCellType();
                num.DecimalPlaces = 10;
                fp.ActiveSheet.Columns[0].CellType = num;
            }
        }
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-4-22 18:08:00
板凳
回复 使用道具 举报
rkk
银牌会员   /  发表于:2013-4-23 14:55:00
地板
多謝山水的方法, 我用方法一可以做到我想要的效果, 但第 4 點可否做到, 因待選里的資料都要帶到指定的欄位, 多謝.
請看附圖.

aaa.PNG
回复 使用道具 举报
rkk
银牌会员   /  发表于:2013-4-24 00:12:00
5#
第4 個問題已解決, 在 EditModeOff 事件里, 用 MultiColumnEditor 可以得出MultiColumnCombobox 里各 column 的值及帶出. 如下:

    Private Sub FpSpread1_EditModeOff(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOff
        Dim colIndex As Integer

        Dim mce As MultiColumnEditor = TryCast(FpSpread1.EditingControl, MultiColumnEditor)
        If mce Is Nothing Then Exit Sub ' 不是 MultiColumnCombobox  時離開
        If FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex).Value = Nothing Then Exit Sub '為空值時離開
        If FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex).Value.ToString = "" Then Exit Sub '為空值時離開

        colIndex = FpSpread1.ActiveSheet.ActiveColumnIndex

        Try
            Dim c As FpSpread = TryCast(mce.SubEditor, FpSpread)
            Select Case colIndex
                Case 0            'Column 0 MultiColumnComboBoxCellType 這個例子里有 2 個 MultiColumnCombobox
                    FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, 1).Value = c.ActiveSheet.Cells(c.ActiveSheet.ActiveRowIndex, 1).Value
                Case 1            'Column 1 MultiColumnComboBoxCellType
                    FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, 2).Value = c.ActiveSheet.Cells(c.ActiveSheet.ActiveRowIndex, 1).Value      ' 取 MultiColumnCombobox 里的第2欄
                    FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, 3).Value = c.ActiveSheet.Cells(c.ActiveSheet.ActiveRowIndex, 2).Value
                    FpSpread1.ActiveSheet.Cells(FpSpread1.ActiveSheet.ActiveRowIndex, 4).Value = c.ActiveSheet.Cells(c.ActiveSheet.ActiveRowIndex, 3).Value
            End Select
        Catch ex As Exception
        End Try

    End Sub
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-4-25 17:19:00
6#
回复 5楼rkk的帖子

感谢反馈问题解决方案。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部