2012-01-13 11 views
2

例を使用してエディタを動的に追加/削除し、このエラーが発生します。 this.field.msgTargetがnullまたはオブジェクトエラーではありません。私はext.netの新人です - 誰かが私を助けることができますか? おかげで、 ジェニーEXT.NETのフィールドコンテンツに応じてフィールドを編集可能にする必要があります。取得this.field.msgTarget nullまたはオブジェクトエラーではありません

が、これは私のコードです: EditExample.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EditExample.aspx.cs"  Inherits="myApp.EditExample" %> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 
     var setEditor = function (e) { 
     var column = e.grid.getColumnModel().columns[e.column], 
     ed = column.getCellEditor(e.row); 
     if (ed && (e.value != null || e.value != '')) { 
      ed.destroy(); 
     } 
     else { 
      column.setEditor(new Ext.form.TextField()); 
     } 
    } 
</script> 

</head> 
<body> 
<form id="form1" runat="server"> 

<ext:ResourceManager runat="server" /> 
<ext:Store ID="extStore" runat="server" > 
<Reader> 
    <ext:JsonReader> 
    <Fields> 
     <ext:RecordField Name = "Name" /> 
     <ext:RecordField Name = "Code" ></ext:RecordField> 
     <ext:RecordField Name = "Description" ></ext:RecordField> 
    </Fields> 
    </ext:JsonReader> 
</Reader> 
</ext:Store> 
<div> 
<ext:GridPanel ID="extGrd" runat="server" StripeRows="true" TrackMouseOver="true" 
StoreID="extStore" Cls="x-grid-custom" 

Height="250px" Layout="fit"> 
<ColumnModel ID="cmFC" runat="server"> 
<Columns> 
    <ext:Column ColumnID="Name" DataIndex="Name" Header="Name"> 
    </ext:Column> 
    <ext:Column ColumnID="Code" DataIndex="Code" Header="Code"> 
    </ext:Column> 
    <ext:Column ColumnID="Description" DataIndex="Description" Header="Description" Editable ="true" > 
     <Editor> 
     <ext:TextField ID="TextField1" runat="server"></ext:TextField> 
     </Editor> 
     </ext:Column> 
    </Columns> 
</ColumnModel> 
<Listeners> 
    <BeforeEdit Fn="setEditor" /> 
    <Render Handler="this.getColumnModel().setEditable(0, true);" /> 
</Listeners> 
<SelectionModel> 
    <ext:RowSelectionModel ID="RowSelectionModel1" runat="server" SingleSelect="true" MoveEditorOnEnter="true"/> 
</SelectionModel> 
<LoadMask ShowMask="true" /> 
</ext:GridPanel> 
</div> 

</form> 
</body> 
</html> 

EditExample.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace myApp 
{ 
    public class info 
    { 
     public string Name { get; set; } 
     public string Code { get; set; } 
     public string Description { get; set; } 
    } 

    public partial class EditExample : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      List<info> thisInfo = new List<info>(); 
      thisInfo.Add(new info { Code = "1", Description = "one", Name = "one Name" }); 
      thisInfo.Add(new info { Code = "2", Description = "two", Name = "two Names" }); 
      thisInfo.Add(new info { Code = "3", Description = "three", Name = "three Names" }); 
      thisInfo.Add(new info { Code = "4", Description = "four", Name = "four Names" }); 
      thisInfo.Add(new info { Code = "5", Description = "five", Name = "five Names" }); 
      thisInfo.Add(new info { Code = "6", Description = "six", Name = "six Names" }); 

      this.extStore.DataSource = thisInfo; 
      this.extStore.DataBind(); 
     } 
    } 

EDIT: 私はフィールドが無効になって作ってみましたし、読み取り専用。 フィールドが無効になっているように見えるようになりました(グレー表示)。

var setEditor = function (e) 
    { 
     var column = e.grid.getColumnModel().columns[e.column], 
        ed = column.getCellEditor(e.row); 
     if (ed) 
     { 
      if (e.value != null && e.value != '') 
      { 
       ed.readOnly = true; ed.setDisabled(true); 
      } 
      else 
      { 
       ed.readOnly = false; ed.setDisabled(false); 
      } 
     } 
    } 
+0

解決策を試しましたか? – Baidaly

+0

いくつかの変更を加えてみてください。また、データストアの値を変更することを忘れないでください。 – Baidaly

答えて

2

イベントの前にfalseを返すことができます。

var setEditor = function (e) { 
      var column = e.grid.getColumnModel().columns[e.column], 
      ed = column.getCellEditor(e.row); 
      if (ed && (e.value != '')) { 
       return false; 
      } 
     } 
+0

はい私は試しましたが、うまくいきませんでした。フィールドに値がある場合、それを編集不能にする必要があります。フィールドが空の場合、値を入力できるようにフィールドを編集可能にする必要があります。エディターを破棄した後にエディターを追加すると、セルが編集可能になります。 – Boroda

+0

ありがとう、それは働いた。 – Boroda

+0

私はまた、ext.netフォーラムから私の問題への解決策を得ました。 var setEditor = function(e){ 戻り値Ext.isEmpty(e.value); }; しかし、このルールに確認するためにフィールドの一部だけが必要で、他のフィールドは常に編集可能な場合は、列タイプまたはインデックスのチェックが必要です。あなたのソリューションは私のためにはうまくいく。ありがとう! – Boroda