vb.net 编辑时如何使单元格只读?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14273635/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make a cell readonly when editing?
提问by Yan Susanto
i wanted to make cell Brand Code read only when edit was click. But when i use properties read only it became so complicate. because when click new, the brand code cannot be click.
我想让单元格品牌代码仅在单击编辑时读取。但是当我使用只读属性时,它变得如此复杂。因为点击new时,品牌代码不能点击。
Here My code
这里我的代码
<dx:ASPxGridView id="gvBrand" runat="server" CssPostfix="Aqua" SettingsBehavior-ConfirmDelete="true" CssFilePath="~/App_Themes/styles.css" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" KeyFieldName="BrandCode" >
<Styles CssPostfix="Aqua" CssFilePath="~/App_Themes/styles.css">
<LoadingPanel ImageSpacing="8px" />
</Styles>
<SettingsPager>
<AllButton Text="All" />
<NextPageButton Text="Next >" />
<PrevPageButton Text="< Prev" />
</SettingsPager>
<SettingsText CommandUpdate="Save" />
<ImagesFilterControl>
<LoadingPanel Url="~/App_Themes/Editors/Loading.gif"></LoadingPanel>
</ImagesFilterControl>
<Images SpriteCssFilePath="~/App_Themes/{0}/sprite.css">
<LoadingPanelOnStatusBar Url="~/App_Themes/GridView/gvLoadingOnStatusBar.gif"> </LoadingPanelOnStatusBar>
<LoadingPanel Url="~/App_Themes/GridView/Loading.gif"></LoadingPanel>
</Images>
<StylesEditors>
<CalendarHeader Spacing="1px"></CalendarHeader>
<ProgressBar Height="25px"></ProgressBar>
</StylesEditors>
<SettingsLoadingPanel ImagePosition="Top" />
<Settings ShowFilterRow="True" ShowGroupPanel="true" />
<Columns>
<dx:GridViewCommandColumn VisibleIndex="0">
<EditButton Visible="True" />
<NewButton Visible="True" />
<DeleteButton Visible="True" />
</dx:GridViewCommandColumn>
<dx:GridViewDataTextColumn FieldName="BrandCode" VisibleIndex="1" Caption="Brand Code"
EditCellStyle-HorizontalAlign="Left" >
<EditFormSettings Visible="True" ColumnSpan="1" />
<PropertiesTextEdit MaxLength="3" Width="35px">
<ValidationSettings SetFocusOnError="True">
<RequiredField IsRequired="True" />
</ValidationSettings>
</PropertiesTextEdit>
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="BrandName" VisibleIndex="2"
Caption="Brand Name" >
<EditFormSettings ColumnSpan="2" />
<PropertiesTextEdit MaxLength="50">
<ValidationSettings SetFocusOnError="True">
<RequiredField IsRequired="True" />
</ValidationSettings>
</PropertiesTextEdit>
</dx:GridViewDataTextColumn>
<dx:GridViewDataCheckColumn FieldName="isBlock" Visible="false"
EditCellStyle-HorizontalAlign="Left" >
<EditFormSettings Visible="true" VisibleIndex="3" Caption="Block"/>
</dx:GridViewDataCheckColumn>
</Columns>
</dx:ASPxGridView>
采纳答案by Filip
You need to handle ASPxGridView.CellEditorInitilaizeevent:
您需要处理ASPxGridView.CellEditorInitilaize事件:
protected void MyGridOnCellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e) {
ASPxGridView gridView = (ASPxGridView).sender;
e.Editor.ReadOnly = !gridView.IsNewRowEditing && "BrandCode".Equals(e.Column.FieldName);
}
回答by Yan Susanto
Thank for the answer i just found it yesterday.
感谢我昨天刚找到的答案。
VB.NET
网络
Protected Sub gvBrand_CellEditorInitialize(ByVal sender As Object, ByVal e As DevExpress.Web.ASPxGridView.ASPxGridViewEditorEventArgs) Handles gvBrand.CellEditorInitialize
If (gvBrand.IsNewRowEditing) Then
Return
End If
If (e.Column.FieldName = "BrandCode") Then
e.Editor.ReadOnly = True
End If
End Sub
回答by user3575816
While in inline mode, e.Editor.ReadOnly did not work for me, but setting e.Editor.Enabled did:
在内联模式下,e.Editor.ReadOnly 对我不起作用,但设置 e.Editor.Enabled 确实:
protected void OnCellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e)
{
List<string> editableFields = new List<string> {"Status"};
e.Editor.Enabled = editableFields.Contains(e.Column.FieldName);
}

