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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 11:51:54  来源:igfitidea点击:

How to make a cell readonly when editing?

asp.netvb.netdevexpress

提问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 &gt;" />
      <PrevPageButton Text="&lt; 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);
    }