在WinForm环境
Infragistics.Win.UltraWinGrid控件中,
假设第一列的SysNo字段不能为空,
用户在输入时略过该列,则弹出警告框,并且光标回到第一列的SysNo字段中,呈选中状态特殊要求:
弹出警告框后,光标只能在输入行移动,不能移动到其他行比如我在第一行输入数据,我不输入第一列数据,移动到下一列,这时弹出警告框,光标回到第一列,
我现在的光标状态只能在第一行移动,不能移动到第二行那位大哥大姐能帮我解决下这个问题,我想了几天了,构郁闷了,实现不了我要的效果。
谢谢~!

解决方案 »

  1.   

    没有你使用的控件,用DATAGRIDVIEW做的,你试试,我没测试过.主要就是能过几个事件:CellEndEdit,CellBeginEdit,选择行发生改变,选择单元格发生改变.我想那个控件里也应该有.你试试吧. Private Sub DataGridView1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            If e.ColumnIndex = 0 AndAlso IsDBNull(DataGridView1.Rows(e.RowIndex).Cells(0).Value) Then
                MsgBox("error")
                DataGridView1.Rows(e.RowIndex).Cells(0).Selected = True
                DataGridView1.BeginEdit(True)
            End If
        End Sub    Private Sub DataGridView1_CellBeginEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
            If e.ColumnIndex <> 0 AndAlso IsDBNull(DataGridView1.Rows(e.RowIndex).Cells(0).Value) Then
                MsgBox("error")
                DataGridView1.Rows(e.RowIndex).Cells(0).Selected = True
                DataGridView1.BeginEdit(True)
            End If
        End Sub没测试,你参考一下吧.
      

  2.   

    lizhengnan:
    你说的还是跟我的一样 还是实现不了那种效果
    光标还是闪了一下就移动到你点击的单元格里面去了我的给你看看
    private void ultraGrid1_InitializeRow(object sender, InitializeRowEventArgs e)
    {
        if (ultraGrid1.ActiveRow != null)
        {
            int i = this.ultraGrid1.ActiveRow.Index;
            string SysNo = this.ultraGrid1.Rows[i].Cells["SysNo"].Value.ToString().Trim();        if (SysNo == "")
            {
                DialogResult dla = MessageBox.Show("订单号不能为空");
                if (dla == DialogResult.OK)
                {                        
                    if (this.ultraGrid1.ActiveRow.Cells["SysNo"].IsInEditMode)
                    {
                        ultraGrid1.Rows[0].Cells["SysNo"].Selected = true;//.SelStart = 0;
                        this.ultraGrid1.KeyActionMappings.Add(
                            new Infragistics.Win.UltraWinGrid.GridKeyActionMapping(//The mapping to add
                            System.Windows.Forms.Keys.LButton, //指定键代码
                            Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode,//当键执行时UltraGridAction要做的动作
                            Infragistics.Win.UltraWinGrid.UltraGridState.AddRow,//获取或设置不接受的的状态
                            Infragistics.Win.UltraWinGrid.UltraGridState.InEdit,//获取或设置必须的状态
                            0,//不接受的特殊的键
                            0));//必须的特殊键
                    }
                }
            }
        }
    }
      

  3.   

    rangeon:
    你说哪个验证事件
    跟我要实现的行加载事件是差不多的关键是怎么实现?
      

  4.   


      this.ultraGrid1.KeyActionMappings.Add( 
                            new Infragistics.Win.UltraWinGrid.GridKeyActionMapping(//The mapping to add 
                            System.Windows.Forms.Keys.LButton, //指定键代码 
                            Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode,//当键执行时UltraGridAction要做的动作 
                            Infragistics.Win.UltraWinGrid.UltraGridState.AddRow,//获取或设置不接受的的状态 
                            Infragistics.Win.UltraWinGrid.UltraGridState.InEdit,//获取或设置必须的状态 
                            0,//不接受的特殊的键 
                            0));//必须的特殊键 
    你的这个方法在DATAGRIDVIEW中没有.
    我理解的是这样的,当你选择其他行的时候可能处发了两个事件,你个是你写的那个,一个是单击事件.你的那个事件在单击事件之前发生,当你调用了以上代码的时候,虽然设置了光标,但在以后的单击事件中又改变了光标的位置.你试一下在这条语句这前  this.ultraGrid1.KeyActionMappings.Add( 
                            new Infragistics.Win.UltraWinGrid.GridKeyActionMapping(//The mapping to add 
                            System.Windows.Forms.Keys.LButton, //指定键代码 
                            Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode,//当键执行时UltraGridAction要做的动作 
                            Infragistics.Win.UltraWinGrid.UltraGridState.AddRow,//获取或设置不接受的的状态 
                            Infragistics.Win.UltraWinGrid.UltraGridState.InEdit,//获取或设置必须的状态 
                            0,//不接受的特殊的键 
                            0));//必须的特殊键 调用一下APPLICATION.DOEVENTS(),看看这样行不行呢.
      

  5.   

       Infragistics.Win.UltraWinGrid 这控件我还不没有用过呢,,,
       不过这个问题应该可以搞定吧,,用焦点事件,,判断,