2016-10-20 19 views
0

私のフォームにAspxGridViewがあります。私はそれが選択チェックボックスだチェックすると、私はClientSideEventsイベントをトリガし、リストボックスに行の値を選択します:devex AspxGridViewでアンバウンドのテキストボックス値を取得する方法

<dx:ASPxListBox ID="listBox" ClientInstanceName="lb" runat="server" 
    ValueType="System.String" Width="961px"></dx:ASPxListBox> 
<ClientSideEvents SelectionChanged="grid_SelectionChanged" /> 

function grid_SelectionChanged(s, e) { 
    s.GetSelectedFieldValues('A;B;C;D;E;F;G;H;I', GetSelectedFieldValuesCallback); 
}  

function GetSelectedFieldValuesCallback(selectedValues) { 
     lb.ClearItems(); 
     if (selectedValues.length == 0) return; 
     l = ""; 
     for (i = 0; i < selectedValues.length; i++) { 
      s = ""; 
      for (j = 0; j < selectedValues[i].length; j++) { 
       s = s + selectedValues[i][j] + " - "; 
      } 
      l = l + s + "\r\n"; 
      lb.AddItem(s); 
     } 
    } 

また、私は以下のようにのようにテキストボックスと更新jsの機能のためにdatatextcolumnsを追加するとき、私はのためにnull値を取得しますテキストボックス。

<dx:GridViewDataTextColumn FieldName="textBox1" VisibleIndex="9"> 
    <Settings AllowHeaderFilter="False"></Settings> 
    <DataItemTemplate> 
     <dx:ASPxTextBox ID="txtBox1" Width="70" runat="server"></dx:ASPxTextBox> 
    </DataItemTemplate> 
</dx:GridViewDataTextColumn> 

<dx:GridViewDataTextColumn FieldName="textBox2" VisibleIndex="10"> 
    <Settings AllowHeaderFilter="False"></Settings> 
    <DataItemTemplate> 
     <dx:ASPxTextBox ID="txtBox2" Width="70" runat="server"></dx:ASPxTextBox> 
    </DataItemTemplate> 
</dx:GridViewDataTextColumn> 

function grid_SelectionChanged(s, e) { 
    s.GetSelectedFieldValues('A;B;C;D;E;F;textBox1;textBox2;G;H;I', 
          GetSelectedFieldValuesCallback); 
} 

この問題を解決するにはどうすればよいですか?

+0

あなたの問題を解決できたかどうか不思議です。 – andrews

答えて

0

問題は、txtBox1フィールドとtxtBox2フィールドがDataItemTemplate内に配置されていることです。アイテムがDataItemTemplate内に配置されている場合は、サーバーサイドIDによってアイテムを直接参照することはできません。必要なのは、各行で参照するASPxTextBoxに一意のClientInstanceNameを割り当てることです。

はDXのサポートはそれを行うために提案する方法を参照してください:

https://www.devexpress.com/Support/Center/Question/Details/T273445

基本的には、アイデアは、あなたが両方のテキストボックスに、サーバー側のOnInitイベントハンドラを追加する必要があるということです。

<dx:ASPxTextBox ID="txtBox1" Width="70" runat="server" OnInit="OnTextBox1Init"/> 

<dx:ASPxTextBox ID="txtBox2" Width="70" runat="server" OnInit="OnTextBox2Init"/> 

と関連するテキストボックスの各インスタンスに「行の可視インデックスに依存する」ClientInstanceNameを割り当てます。その上の行#1の最初のテキストボックスのためtxtBox1_1.GetText()、および:

protected void OnTextBox1Init(object sender, EventArgs e) { 
    ASPxTextBox tb1 = sender as ASPxTextBox; 
    GridViewDataItemTemplateContainer container = 
    tb1.NamingContainer as GridViewDataItemTemplateContainer; 
    tb1.ClientInstanceName = String.Format("txtBox1_{0}", container.VisibleIndex); 
} 

その後、あなたはそれを超えるGetTextは()を呼び出すことによって、この行-ID-依存ClientInstanceNameを使用して、テキストボックスの値を取得することができます。

この説明はあなたの仕事を解決するのに十分です。

関連する問題