0

編集/削除で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()などのデータバインディングメソッドは、データバインドされたコントロールのコンテキストでのみ使用できます。

ソースエラー:

[関連するソース行はありません]

何が原因なのかわかりません。

4

1 に答える 1

1

私はあなたがこのようにそれをすることができるとは思わない。RowEditingイベントをコードビハインドで処理し、SqlDataSourceを手動で調整して正しいデータを表示できます。また、SqlDataSoruceをグリッドの外に移動します。

于 2012-05-22T22:25:55.520 に答える