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

本文关键字:绑定 文本 获取 devex AspxGridView | 更新日期: 2023-09-27 18:14:03

我有一个AspxGridView在我的表单。当我选中它的select复选框时,我触发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); 
}

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

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

问题是您的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"/>

并将"row's-visible-index-dependent" 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行第一个文本框,依此类推。