Gridview中e.Row.RowState 即是Alternate又是Edit问题解决.

本文探讨了ASP.NET中GridView控件在不同行状态下的编辑状态判断问题。通过深入分析,提出了一种无论是在单数行还是双数行都能准确判断是否处于编辑状态的方法。

 

ExpandedBlockStart.gif代码
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        
//如果使用if (e.Row.RowState == DataControlRowState.Edit)作为判断条件,那么如果当前行恰好是交替行时,条件不成立-即便当前行确实也处于编辑状态*/
        if ((e.Row.RowState & DataControlRowState.Edit) != 0)
        {
            TextBox txt1 
= e.Row.Cells[1].Controls[0as TextBox;
            txt1.Width 
= 200;

            txt1.Height
=200;

            }
    } 

 

其他方式:

e.Row.RowState.ToString().IndexOf("Edit")   !=   -1 

或:

 e.Row.RowState   ==   (DataControlRowState.Alternate|DataControlRowState.Edit) || e.Row.RowState ==DataControlRowState.Edit

 

解释:

在GridView控件开启了编辑功能后,点“编辑”链接一般来说都会改变该行为Edit状态,比如在RowDataBound这类事件中用

 

if(e.Row.RowState == DataControlRowState.Edit)
{
 
string a="test";
}

 

 

   来判断是否当前行处于Edit状态,其实这样照理说没任何问题,但是会遇到一个问题,在单数行执行上面的代码块没问题(比如1,3,5,7..行),但是双数行就不会执行(比如2,4,6..行),仔细调试跟踪+MSDN发现双数行的RowState不仅仅有"edit"状态还有"Alternate"状态,MSDN中Alternate的说明是"指示该数据控件行是交替行",难怪不得上面判断代码不执行,把他们都转换成int跟踪看看

 

双数行如2,4,6..行的e.Row.RowState 返回的枚举是: Alternate|Edit 转换成int为5

下面是调试代码得出的结果:

 

int i = (int)(e.Row.RowState);//5
 int j = (int)(DataControlRowState.Edit);//4

 

 

  以上跟踪调试发现在交替行+编辑行的时候i值是5而j是4 所以上面IF语句条件判断不正确当然不会执行了,在单行时候i和j的值都为4,上面IF条件判断4==4所以执行没问题。

这里介绍一种方法不管是单行还是交替行都认为是EDIT状态:

 

if ((e.Row.RowState & DataControlRowState.Edit) != 0)

 

 

因为不管4&4还是5&4都不等于0,所以上面IF执行成功,如果要判断非edit状态,比如说刚进入Gridview的时候我们可以通过

 

if ((e.Row.RowState & DataControlRowState.Edit) == 0)  

 

 

 

来判断,这个时候RowState的值是Normal也就是0,自然0&4==0 上面if执行成功。

 

逻辑运算解释:

1.整数逻辑运算符

预定义的整数逻辑运算符为(以下为.net的运算符重载):

 

ExpandedBlockStart.gif代码
int operator &(int x, int y);
uint operator &(uint x, uint y);
long operator &(long x, long y);
ulong operator &(ulong x, ulong y);
int operator |(int x, int y);
uint operator |(uint x, uint y);
long operator |(long x, long y);
ulong operator |(ulong x, ulong y);
int operator ^(int x, int y);
uint operator ^(uint x, uint y);
long operator ^(long x, long y);
ulong operator ^(ulong x, ulong y);

 

 

& 运算符计算两个操作数的按位逻辑 AND| 运算符计算两个操作数的按位逻辑 OR,而 ^ 运算符计算两个操作数的按位逻辑 XOR。这些运算不可能产生溢出。

 

2.枚举逻辑运算符

每个枚举类型 E 都隐式地提供下列预定义的逻辑运算符:

 

operator &(E x, E y);
operator |(E x, E y);
operator ^(E x, E y);

 

 

x op y(其中 xy 是具有基础类型 U 的枚举类型 E 的表达式,op 是一个逻辑运算符)的计算结果与 (E)((U)x op (U)y) 的计算结果完全相同。换言之,枚举类型逻辑运算符直接对两个操作数的基础类型执行逻辑运算(也就是枚举类型所返回的整数来计算)。

 

布尔逻辑运算符

预定义的布尔逻辑运算符为:

 

bool operator &(bool x, bool y);
bool operator |(bool x, bool y);
bool operator ^(bool x, bool y);

 

 

如果 xy 均为 true,则 x & y 的结果为 true。否则,结果为 false

如果 xytrue,则 x | y 的结果为 true。否则,结果为 false

如果 xtrueyfalse,或者 xfalseytrue,则 x ^ y 的结果为 true。否则,结果为 false。当操作数为 bool 类型时,^ 运算符计算结果与 != 运算符相同。

 

在 DevExpress 的 `GridControl` 控件中,`GridView` 提供了对剪贴板操作的支持,包括复制(Copy)功能。要设置或获取 `GridView` 是否允许将数据复制到剪贴板,可以通过 `OptionsClipboard` 属性中的 `AllowCopy` 子属性来实现。 ### 设置 `AllowCopy` 属性 可以通过以下方式设置 `AllowCopy` 属性: 1. **通过代码设置**: 在代码中,可以直接访问 `GridView` 的 `OptionsClipboard` 属性,并设置其 `AllowCopy` 属性为 `DefaultBoolean.True` 或 `DefaultBoolean.False`,以启用或禁用复制功能。 ```csharp gridView1.OptionsClipboard.AllowCopy = DevExpress.Utils.DefaultBoolean.True; // 启用复制功能 ``` 2. **通过设计器设置**: 在 Visual Studio 的设计界面中,选中 `GridView` 控件,打开其属性窗口,展开 `OptionsClipboard` 属性,找到 `AllowCopy` 并设置其值为 `True` 或 `False`。 ### 获取 `AllowCopy` 属性的状态 可以通过代码获取当前 `AllowCopy` 属性的状态: ```csharp DevExpress.Utils.DefaultBoolean isCopyAllowed = gridView1.OptionsClipboard.AllowCopy; ``` 如果 `isCopyAllowed` 的值为 `DefaultBoolean.True`,则表示允许复制操作;如果值为 `DefaultBoolean.False`,则表示禁止复制操作[^1]。 ### 其他相关剪贴板选项 除了 `AllowCopy` 属性之外,`OptionsClipboard` 还提供了其他几个有用的属性,例如: - `AllowCut`:控制是否允许剪切操作。 - `AllowPaste`:控制是否允许粘贴操作。 - `UseOfficeCopyPaste`:控制是否使用 Office 风格的复制粘贴行为。 这些属性可以以类似的方式进行设置和获取。 ### 示例:根据条件动态控制复制功能 可以根据特定条件动态地启用或禁用复制功能。例如,在用户选择某些特定行时禁用复制功能: ```csharp private void gridView1_SelectionChanged(object sender, DevExpress.Data.SelectionChangedEventArgs e) { if (gridView1.SelectedRowsCount > 0) { // 假设当有行被选中时禁用复制 gridView1.OptionsClipboard.AllowCopy = DevExpress.Utils.DefaultBoolean.False; } else { // 否则启用复制 gridView1.OptionsClipboard.AllowCopy = DevExpress.Utils.DefaultBoolean.True; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值