我在Datagrid内部有一个User控件,可以添加行。每行包含两个textobxes和一个Dropdownlist。 用户可以保存他在每个文本框中输入的内容,并保存下拉菜单中的选择项。
文本框直接与不同的属性( ProductionCostInvoicedTo 和 ProductionCostEuro )绑定,因此可以直接打印正确的值。
我想选择保存在下拉列表( ProductionCostNatureId )中的值,要做到这一点,我在下拉列表中使用了Javascript和Custom属性:
<asp:DataGrid ID="ProdCostGrid" runat="server" AutoGenerateColumns="False" BorderColor="#f0f0f0" BorderStyle="None" BorderWidth="0px" CellPadding="0">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<Columns>
<asp:BoundColumn Visible="False" DataField="Id" HeaderText="Id"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
Amount: <asp:TextBox ID="ProductionCostLineField" Text='<%# ToText(Eval("ProductionCostEuro")) %>'
TabIndex="24" runat="server" Width="80px" MaxLength="13"></asp:TextBox> EUR
</ItemTemplate>
<ItemStyle Width="170px" HorizontalAlign="Right"></ItemStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
Invoiced by</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="ProductionCostInvoiceToLineField" Text='<%# Eval("ProductionCostInvoicedTo") %>'
TabIndex="25" runat="server" Width="269px" MaxLength="100"></asp:TextBox>
</ItemTemplate>
<ItemStyle Width="300px" HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderTemplate>
(Prod Cost) Nature</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ProductionCostNatureList" CssClass="myClass" data-id='<%# ToText(Eval("ProductionCostNatureId")) %>' TabIndex="3" runat="server" DataTextField="Name" Width="75%" DataValueField="Id" AutoPostBack="true">
</asp:DropDownList>
</ItemTemplate>
<ItemStyle Width="300px" HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>
</Columns>
使用Javascript从自定义属性中选择合适的元素:
$(function () {
var id = $('.myClass').attr('data-id');
$('.myClass').each(function () {
$(this).get(0).selectedIndex = id;
$(this).change();
});
});
在ASCX中,我收到错误消息:“诸如Eval(),XPath()和Bind()之类的数据绑定方法只能在数据绑定控件的上下文中使用”
我不想使用“隐藏”文本框...