【问题标题】:ASPxGridView Can't Edit Row With ReadOnly FalseASPxGridView 无法使用 ReadOnly False 编辑行
【发布时间】:2011-09-16 08:23:28
【问题描述】:

我目前正在使用一个 ASPxGridView 控件的 aspx 网站。我能够以我希望的方式在我的 GridView 上显示数据。但是,当我单击“编辑”按钮(由控件本身在命令列下提供)时,会出现我的问题。单击所述按钮后,GridView 会将行更改为可编辑行。但是,我无法更改文本框中的值。请注意,我已经在 GridView 的智能标记和 xml 源本身上将 ReadOnly 属性设置为 false。

我尝试创建一个测试标志,其中只要 ReadOnly 属性设置为 true,文本框的背景色就会变为蓝色。运行程序后,无论 ReadOnly 设置为 true 还是 false,文本框都会显示为蓝色。

是否有任何其他属性可以帮助我使这些文本框可编辑?非常感谢!

干杯!

【问题讨论】:

  • 当您说“但是,我无法更改文本框中的值”时,您的意思是您无法在单元格中输入内容?
  • 是的。我无法在单元格中输入。例如,当单元格内的原始值为“1000”时,单击编辑按钮时,它将显示在“1000”内具有相同值的文本框版本。我无法编辑它。我不能打字也不能改变它。感谢您的回复。
  • 你设置了 KeyFieldName 网格的属性吗?如果您使用数据源控件,还要检查您是否处理了 RowUpdating 之类的事件或有 UpdateCommand。
  • 是的,我设置了 KeyFieldName 属性。我还能够处理可以通过断点测试的 RowUpdating。我唯一的问题是,即使我的所有 ReadOnly 属性都已设置为 false,我也无法编辑文本框中的内容。
  • 您的网格是绑定到实体还是数据集?如果该字段对应于数据源中的只读字段,则它可能变为只读。无论如何,您可以尝试在“CellEditorInitialize”事件中为该列设置“e.Editor.Readonly = False”,看看是否有效?

标签: c# asp.net aspxgridview


【解决方案1】:

我今天也遇到了同样的问题。如果您将数据源设置为匿名类型,则可能会出现此症状:

void BindDataGrid()
{
    var gridData = from cm in MyCollection
                   select new 
                   {
                       UniqueId = cm.UniqueId,
                       Min = cm.SomeNumber ?? 0,
                       Max = cm.SomeOtherNumber ?? 0,
                       Description = cm.Description
                   };

    this.myGrid.DataSource = gridData;
    this.myGrid.DataBind();
}

解决方法是创建一个类供网格使用。然后它能够​​找出每个单元格的数据类型,并且它们可以在 UI 中进行编辑:

public class MyGridViewModel
{
    public Guid UniqueId { get; set; }
    public int Min { get; set; }
    public int Max { get; set; }
    public string Description { get; set; }
}

void BindDataGrid()
{
    var gridData = from cm in MyCollection
                   select new MyGridViewModel()
                   {
                       UniqueId = cm.UniqueId,
                       Min = cm.SomeNumber ?? 0,
                       Max = cm.SomeOtherNumber ?? 0,
                       Description = cm.Description
                   };

    this.myGrid.DataSource = gridData;
    this.myGrid.DataBind();
}

【讨论】:

    【解决方案2】:

    我犯了一个错误,试图编辑受保护的属性。如果一个属性有一个公共 getter 和一个私有或受保护的 setter,那么它将在编辑表单中显示为只读字段。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多