欢迎光临
我们一直在努力

关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关

建站超值云服务器,限时71元/月

前几天在尝试使用2005新出的datagridview 控件,结果在接收当前编辑状态下的文本信息的时候出现了麻烦。比方我现在处在第一行第一列,然后我输入一个1,那这个1是什么时候才会邦定到空间的value属性里面呢,你可以通过两个途径,一个是cellendedit一个是valuechanged事件中取到,但是,还有一个麻烦,这两个事件都是在焦点移到别的cell里面去的时候才会触发或者前者在endedit函数执行后触发,但是什么地方去写这个函数,能不能达到预期效果呢?我做了个尝试,我曾经尝试在processcmdkey里面写这个函数触发cellendedit事件,但是百试不得其果,如果哪位朋友看到这里并且已经实现了的话,那么希望能够给我下个例子演示下,所以无奈下,我只能考虑用自定义的datagridviewcolumn来实现。

接下来我的思路很明确,就是采用datagridviewcolumn来实现,首先,最简单的就是,我们继承一个datagridviewtextboxcell,和一个datagridviewcolumn控件,我们知道我们可以在文本的keyup事件里面取得当前文本框里面的值,在keypress事件里面取不倒,比方你原先有个1然后你输入一个字符a那么,keypress事件里面只有一个1只有在keyup事件里面才可以取得1a,当然textchanged等其他事件里面也可以取到,我这里采用keyup事件,那么我们就也为datagridviewcolumn开放这个事件,所以我们再datagridviewcolumn中自定义一个事件,比方datagridviewcolumnkeyup,然后在这个里面写个函数,函数做的工作就是判断外面有没有实现这个事件,如果实现的话旧触发该事件。然而我们这个事件是需要在文本矿的keyup事件中触发,所以我们还得重新写datagridviewtextboxcell中的initializeeditingcontrol,函数,在这个函数里面实现keyup事件的触发,但我们还需要让外面的用户能访问到现在的值比方上面的1a,所以我们还需要为自定义的datagridviewcolumn定义这么个属性,然后在自定义的datagridviewtextboxcell中对其赋值,具体代码如下:

//mydatagridviewcolumn.cs
 public class mydatagridviewcolumn : datagridviewcolumn
    {
        public mydatagridviewcolumn()
            : base()
        {
            this.celltemplate = new mydatagridviewcell();
        }

        public override datagridviewcell celltemplate
        {
            get
            {
                return base.celltemplate;
            }
            set
            {
                if (value != null && !value.gettype().isassignablefrom(typeof(mydatagridviewcell)))
                {
                    throw new exception(“这个列里面必须邦定mydatagridviewcell”);
                }
                base.celltemplate = value;
               
            }
        }

        private string m_datagridviewcolumntextvalue = “”;
       
        public string datagridviewcolumntextvalue
        {
            get
            {
                return m_datagridviewcolumntextvalue;
            }
            set
            {
                m_datagridviewcolumntextvalue = value;
            }
        }

        public void mydatagridviewcolumn_datagridviewcolumnkeyup(object sender, keyeventargs e)
        {
            if (datagridviewcolumnkeyup != null)
            {
                datagridviewcolumnkeyup(this, e);
            }
        }

        public event keyeventhandler datagridviewcolumnkeyup;
}

 

//mydatagridviewcell.cs
  public class mydatagridviewcell : datagridviewtextboxcell
    {
        public mydatagridviewcell()
            : base()
        { }

        private  datagridviewtextboxeditingcontrol dgvtbec;
        private datagridviewcolumn dgvc;
        private mydatagridviewcolumn mdgvc;

        public override void initializeeditingcontrol(int rowindex, object initialformattedvalue, datagridviewcellstyle datagridviewcellstyle)
        {

            base.initializeeditingcontrol(rowindex, initialformattedvalue, datagridviewcellstyle);
            dgvtbec = datagridview.editingcontrol as datagridviewtextboxeditingcontrol;
            dgvc = this.owningcolumn;
            if (dgvc is mydatagridviewcolumn)
            {
                mdgvc = dgvc as mydatagridviewcolumn;
                dgvtbec.keyup += new keyeventhandler(dgvtbec_keyup);
            }
        }

        void dgvtbec_keyup(object sender, keyeventargs e)
        {
            mdgvc.datagridviewcolumntextvalue = dgvtbec.text;
            mdgvc.mydatagridviewcolumn_datagridviewcolumnkeyup(sender, e);
        }
    }

这样你外面就可以使用这个mydatagridviewcolumn,然后为其定义实现这个datagridviewcolumnkeyup事件,得到这个值了。具体你大家可以做下尝试,同时我希望大家能提供一种更加好的办法,因为我这样做的话,有可能所有已经有的datagridcolumn都得重新做过了,我觉得他们微软的开发人员肯定有什么更加好的办法的,只是我不知道,希望大家能给我指条明路,谢谢!!

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
分享到: 更多 (0)