如何在devex AspxGridView中获取未绑定的文本框值

时间:2016-10-20 10:27:06

标签: javascript c# asp.net devexpress aspxgridview

我的表单中有一个AspxGridView。当我选中它的复选框时,我会触发ClientSideEvents事件并将选定的行值添加到列表框中:

<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);
        }
    }

此外,当我为文本框添加datatextcolumns并更新js函数时,如下所示,我得到文本框的空值。

<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); 
}

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是你的txtBox1和txtBox2字段放在DataItemTemplate中。当item放在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"/>

并指定&#34;行&#39; s-visible-index-dependent&#34; ClientInstanceName到相关文本框的每个实例。

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来获取文本框值:txtBox1_1.GetText()用于第1行的第一个文本框,依此类推。

希望这个解释足以让你解决任务。

相关问题