我有一个网格和表单元素,我从网络服务读取网格并填充它。我想要做的是,当用户单击按钮时,网格上有一个按钮列,我想设置表单部分的公司名称字段的值。我们的框架是 webforms 。我从网格中获取了公司名称,但无法设置表单部分的字段。问题出在 id 上。 Id是在运行时指定的,表单中的id是txtFirmaAdi,但我无法在js中设置它。谢谢,我的脚本如下:
function callme(e) {
var tds = e.parentNode.parentNode.getElementsByTagName('td');
var text = $('[id$="txtFirmaAdi"]');
text.value = tds[1].innerHTML.trim();
text.value = "DEneme";
我的表单aspx如下:
<div class="form-horizontal">
<div class="control-group">
<label class="control-label">İşyeri Adı</label>
<div class="controls">
<asp:TextBox runat="server" ID="txtFirmaAdi" CssClass="input-xlarge" MaxLength="220"></asp:TextBox>
</div>
</div>
实际上,我发现最简单的方法是将按钮名称传递给 js 代码并从中开始工作。
HTML 标准是不提供具有相同 id 的控件或按钮等。
因此,当您将控件放入 GridView 时,它们可以(并且确实)拥有您分配的“id”,但由于多行,因此在大多数情况下,控件将被重新命名,并添加前缀带有 GridView ID,然后加上行号后缀(从 0 开始)。
所以,说这个简单的网格视图,以及像这样的行单击按钮:
<asp:GridView ID="GVHotels" runat="server" AutoGenerateColumns="False"
DataKeyNames="ID" CssClass="table table-hover"
Width="45%">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:TemplateField HeaderText="H Templated">
<ItemTemplate>
<asp:Label ID="txtHotel" runat="server"
Text='<%# Eval("HotelName") %>' >
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="cmdEdit" runat="server" Text="Edit"
CssClass="btn"
OnClientClick="myedit(this);return false;"
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<script>
function myedit(btn) {
var txtHotelc = "#" + btn.id.replace("_cmdEdit_", "_txtHotel_")
var txtHotel = $(txtHotelc)
alert("Hotel name from row = " + txtHotel.text())
// get cells collection, NON templated columns
var myrow = btn.closest('tr')
alert(myrow.cells[0].innerText)
}
</script>
加载网格视图的代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadGrid
End If
End Sub
Sub LoadGrid()
GVHotels.DataSource = MyRst("SELECT * FROM tblHotelsA
WHERE Active = 1 ORDER BY HotelName")
GVHotels.DataBind()
End Sub
我们现在有了这个:
因此,有 2 个用例:
我想要一个模板化控件(标签、文本框、复选框等)
或者
我想获取一个单元格集合项(数据绑定列)。
对于模板化控件(asp.net 控件),它们将如上所述应用编号方案 (GridViewName_ControlName_RowNumber)。
所以,我只是对按钮 ID 进行简单的替换(确保它是服务器端按钮)。
对于非模板化的单元格集合,我们选择当前行,然后按照上面的方式使用单元格集合。