C# code
返回光标处的行索引号()publicint GetRowIndexAt(int mouseLocation_Y)
{if (dataGridView1FirstDisplayedScrollingRowIndex<0)
{return-1;// no rows }if (dataGridView1ColumnHeadersVisible==true&& mouseLocation_Y<= dataGridView1ColumnHeadersHeight)
{return-1;
}int index= dataGridView1FirstDisplayedScrollingRowIndex;int displayedCount= dataGridView1DisplayedRowCount(true);for (int k=1; k<= displayedCount; )// 因为行不能ReOrder,故只需要搜索显示的行 {if (dataGridView1Rows[index]Visible==true)
{
Rectangle rect= dataGridView1GetRowDisplayRectangle(index,true);// 取该区域的显示部分区域if (rectTop<= mouseLocation_Y&& mouseLocation_Y< rectBottom)
{return index;
}
k++;// 只计数显示的行; }
index++;
}return-1;
}
测试用代码:
把当前行的index号(从0开始)显示到TextBox1上。
private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
textBox1Text= GetRowIndexAt(eY)ToString();
}
首先要保证显示RowHeader列,然后在DataGridView的RowPostPaint事件中写如下代码:
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e){
using (SolidBrush b = new SolidBrush(dataGridView1RowHeadersDefaultCellStyleForeColor))
{
eGraphicsDrawString(eRowIndexToString(SystemGlobalizationCultureInfoCurrentUICulture), eInheritedRowStyleFont, b, eRowBoundsLocationX + 20, eRowBoundsLocationY + 4);
}
}
你可以重写DataGridView的OnRowPostPaint方法或者直接在DataGridView的RowPostPaint事件里写,如下(重写DataGridView的OnRowPostPaint方法)
using System;
using SystemText;
using SystemWindowsForms;
using SystemDrawing;
namespace Test
{
class DataGridViewEx : DataGridView
{
SolidBrush solidBrush;
public DataGridViewEx()
{
solidBrush = new SolidBrush(thisRowHeadersDefaultCellStyleForeColor);
}
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
eGraphicsDrawString((eRowIndex + 1)ToString(), eInheritedRowStyleFont, solidBrush, eRowBoundsLocationX + 15, eRowBoundsLocationY + 5);
baseOnRowPostPaint(e);
}
}
}
问题在dataGridView1SelectedCells这里
你的文本框显示的是你选中的数据,而CellClick的时候SelectedCells里面应该是没有东西的
你处理下DataGridViewCellEventArgs 参数,从这里面可以取得你点击的数据 (行列号等)
添加列:
DataGridViewColumn column = new DataGridViewColumn();
设置column属性如:columnHeaderText = "列名";
dgv1columnsadd(column);
添加行:
DataGridViewRow row = new DataGridViewRow();
设置row属性
dgv1rowsadd(row);
(一)。自适应窗体的代码:
using System;
using SystemWindowsForms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
//1声明自适应类实例
AutoSizeFormClass asc = new AutoSizeFormClass();
public Form1()
{
InitializeComponent();
//如果加入"皮肤",则不能在Form1_Load中记录控件的大小和位置,因为有些控件如dataGridView的子控件还未完成
//而要在在Form1_SizeChanged中,第一次改变时,记录控件的大小和位置
thisskinEngine1SkinFile = "EmeraldColor1ssk";
}
//2 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小
private void Form1_Load(object sender, EventArgs e)
{
// asccontrollInitializeSize(this);
}
//3为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应
private void Form1_SizeChanged(object sender, EventArgs e)
{
asccontrolAutoSize(this);
// thisWindowState = (SystemWindowsFormsFormWindowState)(2);//记录完控件的初始位置和大小后,再最大化
}
}
}
(二)。自适应类的代码
using SystemCollectionsGeneric;
using SystemWindowsForms;
namespace WindowsFormsApplication1
{
class AutoSizeFormClass
{
//(1)声明结构,只记录窗体和其控件的初始位置和大小。
public struct controlRect
{
public int Left;
public int Top;
public int Width;
public int Height;
}
实际 *** 作起来可能没有你想象的那么简单,你需要响应Form Resize之类的事件,然后根据事件,实时逐个调整控件的大小。在WPF中就简单多了。
,使用时需要先判断thisdataGridView1SelectedCellscount,不为0 在进行上面的 *** 作。
获取总行数:dataGridView1RowsCount;
获取当前选中行索引:int i = thisdataGridView1CurrentRowIndex;
获取当前选中列索引:int j = thisdataGridView1CurrentCellColumnIndex;
方法一:
thisdgvStuListSelectedRows[0]Cells["列"]ValueToString()
方法二:
dgvStuListRows[dgvStuListCurrentRowIndex]Cells["列名"]ValueToString()
/////////////////////////////////////////////////
点击已有数据行时只允许修改和删除,不可以添加,点击空白行时只运行添加,不允许删除和修改,那问题是如何来判断用户点击的是空白行呢,按钮是否可用的判断代码放在哪里呢?
解决方法:给datagrid添加mouse_enter事件
private void userInfo_MouseEnter(object sender,SystemEventArgs e) {
int row = userInfoCurrentCell RowNumber;
if(row == listSize) //list 是我用来存放数据表的对象集合, {
menuMenuItems[0]Enabled = true;
}
else
{
menuMenuItems[0]Enabled = false;
}
}
///////////////////////////////////////////////////////////
thisdataGridView1Rows[0]Cells[0]ReadOnly
0行0列ReadOnly=是否可编辑,返回布尔值
看看英文单词就知道了,不要总问别人,自己做记忆深刻
以上就是关于C#的dataGridView 怎样获取鼠标坐标位置所在行全部的内容,包括:C#的dataGridView 怎样获取鼠标坐标位置所在行、C# 中dev gridview怎么在最左边显示序号,如图显示、C#中DataGridView控件的行头显示序号的宽度适中也就是RowHearWidth属性 我想让行头显示是左对齐显示序号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)