我正在使用gridview进行编辑/删除。当用户点击“编辑”时,我需要将一个值(100mPLot)中的值传递给一个数据源,该数据源将填充另一列(SubPlot)的下拉列表。这就是我所拥有的:
<asp:BoundField DataField="100mPlot" HeaderText="100m plot"
SortExpression="100mPlot" ReadOnly="True" />
<asp:TemplateField HeaderText="SubPlot" SortExpression="SubPlot">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="dsSubPlotNames"
DataTextField="SiteName" DataValueField="SiteID"
SelectedValue='<%# Bind("SiteID") %>'
>
</asp:DropDownList>
<asp:SqlDataSource ID="dsSubPlotNames" runat="server"
ConnectionString="<%$ ConnectionStrings:WERCMTX %>" SelectCommand='exec [339_PPM].usp_SubPlotNames_Select null, @100mPlotName;'
CancelSelectOnNullParameter="False">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" DefaultValue='<%# Eval("100mPlot") '
Name="100mPlotName" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("SubPlot") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
不幸的是,我在Eval(“100mPlot”)中得到了这个错误:
仅在具有DataBinding事件的对象上支持数据绑定表达式。 System.Web.UI.WebControls.ControlParameter没有DataBinding事件。
我该如何解决这个问题?谢谢,
编辑:
我将它移到了代码后面并在创建一个包含前一列值的隐藏标签标签后在RowDataBound中处理它。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState & DataControlRowState.Edit) == DataControlRowState.Edit)
{
Label lbl100mPlot = (Label)e.Row.FindControl("lbl100mPlot");
SqlDataSource dsPlotNames = (SqlDataSource)e.Row.FindControl("dsSubPlotNames");
dsPlotNames.SelectParameters.Clear();
dsPlotNames.SelectParameters.Add("100mPlotSiteID", null);
dsPlotNames.SelectParameters.Add("100mPlotName", lbl100mPlot.Text);
}
}
我的下一个问题是这个错误:
数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。
异常详细信息:System.InvalidOperationException:数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。
来源错误:
[没有相关的源代码行]
我不确定是什么导致它。
答案 0 :(得分:1)
我不认为你可以这样做。您可以在代码后面处理RowEditing事件并手动调整SqlDataSource以显示正确的数据。另外,将SqlDataSoruce移出网格。