为什么cell设置readonly无效

happywm 2011-12-13 09:13:51
C# visual studio 2010 编写的程序里会需要在创建的datagridviewa里(addGridViewInPages(string[] inputArray)
)先将显示Value的column[2]设置为可改变,然后在addStringInGridView()函数里,当Value值为"Table"时,将该Cell的readonly的值改为true;
编译没问题,可是在运行中该Cell还是可以被编辑,这是为什么?


private void addGridViewInPages(string[] inputArray)
{
string tempName = string.Empty;
//read page name from array one by one
foreach (string tempString in inputArray)
{
DataGridView dgv = new DataGridView();
//ListView dgv = new ListView();
tempName = "tp" + tempString;
//find control in tab page
foreach (Control findControl in myMainForm.tabCalibration.Controls)
{
TabPage tempPage = (findControl as TabPage);
if (tempPage.Name.ToString() == tempName)
{
tempPage.Controls.Add(dgv);
dgv.Name = "lv" + tempString;
dgv.ColumnCount = 5;
dgv.Columns[0].Name = "ADDRESS";
dgv.Columns[1].Name = "NAME";
dgv.Columns[2].Name = "VALUE";
dgv.Columns[2].ReadOnly = false;
dgv.Columns[3].Name = "UNIT";
dgv.Columns[4].Name = "DESCRIPTION";
for (int cycInt = 0; cycInt < 5; cycInt++)
{
dgv.Columns[cycInt].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
}
dgv.Columns[0].ReadOnly = true;
dgv.Columns[1].ReadOnly = true;
dgv.Columns[3].ReadOnly = true;
dgv.Columns[4].ReadOnly = true;
dgv.Columns[2].DefaultCellStyle.ForeColor = System.Drawing.Color.Blue;
}
}
}

}


private void addStringInGridView(string address,string name,string category, string unit,string value,string description )
{
///find listview and fill messge
string tempPageText;
tempPageText = "tp"+category;
foreach (Control findControl in myMainForm.tabCalibration.Controls)
{
TabPage findPage = (findControl as TabPage);
if (findPage.Name == tempPageText)
{
foreach (Control findGridView in findPage.Controls)
{
DataGridView dgv = (findGridView as DataGridView);
dgv.Rows.Add(address, name, value, unit, description);
if (value == "Table" && dgv.RowCount>0)
{
dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly = true;
}
}
}
}
}
...全文
315 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
happywm 2011-12-16
  • 打赏
  • 举报
回复
谢谢yt1324
小冲王 2011-12-15
  • 打赏
  • 举报
回复
datagridview单元格的readonly属性只在第一次绑定时有效,当添加一个新数据行未保存时,切换tabpage页再回过来时程序重新绑定了一次,此时readonly失效了,因为在切换页面的时候重新绑定了数据集,这说明readonly只在第一次绑定时有效。数据集发生改变时再绑定时,readonly失效。得在绑定代码中写代码使其为只读才行
happywm 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bearlin081001 的回复:]
dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly = true;
确认执行了吗...
[/Quote]
确认,我曾经加上语句bool bbb = dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly;
然后中断查看,确实是设为true了。
bearlin081001 2011-12-15
  • 打赏
  • 举报
回复
dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly = true;
确认执行了吗...
淘淘大师 2011-12-15
  • 打赏
  • 举报
回复
e.Row.Cells[1].Enabled = false;
happywm 2011-12-15
  • 打赏
  • 举报
回复
自己顶一下,我不相信Visual Studio 的著名datagridview这么傻。
happywm 2011-12-14
  • 打赏
  • 举报
回复
因为程序要编写下去,所以我只好曲线救国,用CellEditBegin,if “Table”, 然后 e.calcel = true;
难道不能修改单个cell的readonly属性吗?希望能有高手帮助解答,谢谢!
happywm 2011-12-14
  • 打赏
  • 举报
回复
试过各种方法,发现一个column里的cells要么都是readonly要么都不是readonly,似乎不能改变其中一部分的readonly属性
Ny-6000 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ajaxtop 的回复:]
C# code


dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly = true;
//先在这里给个值,看下,页面是什么效果,是不是rowcount这里有问题
[/Quote]

+1

不行,可以设置另一个属性,disabled = disabled
yth126 2011-12-13
  • 打赏
  • 举报
回复
dgv.Columns[2].Attribus.Add("readonly","true");试试
ajaxtop 2011-12-13
  • 打赏
  • 举报
回复

dgv.Rows[dgv.RowCount-1].Cells[2].ReadOnly = true;
//先在这里给个值,看下,页面是什么效果,是不是rowcount这里有问题

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧