如何在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);
}
我该怎么做才能解决这个问题?
问题是您的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行第一个文本框,依此类推。