我的表单中有一个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);
}
我该怎么做才能解决这个问题?
答案 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行的第一个文本框,依此类推。
希望这个解释足以让你解决任务。