当我们刚接触datagrid时候,可能会对它不太熟悉,有时候一些常见的设置都会让你苦恼半天,鉴于此,我总结了一下它的比较常见的用法,希望能给刚接触datagrid的人一些帮助。
一 对每一列进行一些设置,这里就要我们对datagrid的列有一定的认识,它的列可分为两种,datagridtextboxcolumn 和 datagridboolcolumn 。当然你也可以添加你自己的列的样式,只要继承datagridcolumnstyle就行了(当然还要重写一些方法)。
下面是一段代码:
datagridtablestyle style=new datagridtablestyle();
style.mappingname=ds.tables[0].tablename.tostring();
datagridboolcolumn colu=new datagridboolcolumn();
colu.mappingname="isselect";//映射到表的某一列
colu.headertext=""; //列的表头名字
colu.truevalue="y"; //打勾时的值
colu.falsevalue="n";
colu.width=40; //设置改列的宽度
colu.allownull=false; //不允许为null值
colu.readonly=true; //把改列设置为只读的
style.gridcolumnstyles.add(colu);
上面的代码就是创建了一个datagridboolcolumn列,该列就是一个checkbox列,checkbox有三种状态,true,false,null,你可以通过设置colu.allownull=false;取消第三种状态。
再看一段代码,它是创建 datagridtextbox列
datagridtextboxcolumn col;
col=new datagridtextboxcolumn();
col.mappingname="dminimumpv";
col.headertext="最低累积业绩";
col.alignment=horizontalalignment.right;//该列的对齐方式
col.format="#,###.00"; //设置显示的格式
col.width=90;
style.gridcolumnstyles.add(col);
相信这两段代码应该让你对datagrid的列的设置有了一定的了解了吧!
二 捕获datagrid里的双击事件,本来很简单的问题,可是如果你只对datagrid的doubleclicked里写程序的话,你就会发现一个问题,在datagrid的cell里双击时没有反应,这是因为在datagrid里有textbox组成,所以你就需要捕获textbox的doubleclicked事件,但你完成这一步时,看看效果咋样,如果你仔细的话,你就又会发现一个问题,当光标还没有在一个单元格时,双击该单元格,发现了什么?没有任何反应,明明双击了吗,为啥呢?这是因为datagrid把这个双击操作分解了,分为两个单击,第一个使该单元格获得光标,第二个为单击事件,所以你的双击就没有反应了,所以我们要做的就是把这个动作当作双击事件来处理,这样就达到我们的目的了。所以捕获一个双击事件就要做三件事。下面是一段代码。
第一步:
private void dgrole_doubleclick(object sender,system.eventargs e)
//dgrole为datagrid
{
this.frmrolerightshow(); //我们双击要做的事
}
第二步:
private void textbox_doubleclick(object sender,system.eventargs e)
{
this.frmrolerightshow();
}
第三步:
datetime gridmousedowntime;
private void dgrole_mousedown(object sender,system.windows.forms.mouseeventargs e)
{
gridmousedowntime=datetime.now; //纪录时间
}
private void textbox_mousedown(object sender,mouseeventargs e)
{
if(datetime.now < gridmousedowntime.addmilliseconds(systeminformation.doubleclicktime))
//如果两次单击的时间小于系统的双击时间,我们就把它认为是双击操作
{
this.frmrolerightshow();
}
}
三 怎样取某一个单元格的值?一行代码,如下:
string strrole=dgrole[row,column].tostring();
以上是我通过看csdn上的贴子和在实践中总结出来的,如果你对datagrid的使用有什么心得的话,不妨把它写出来,与大家分享。
