gpt4 book ai didi

asp.net - ObjectDataSource 选择方法不能 'see' 任何其他控件的值

转载 作者:行者123 更新时间:2023-12-02 20:53:20 26 4
gpt4 key购买 nike

我什至不知道如何清楚地表达这一点,而且代码太多,无法全部粘贴到这里。

让我从一般性描述开始,也许它会敲响警钟。我有一个使用 ObjectDataSource 的 DataGrid。由于需要两个日期选择器来过滤结果,ObjectDataSource 使用调用另一个方法的 SelectMethod。

但是,当 SelectMethod 触发时,日期选择器始终为空。

一个相关的问题是,需要一个按钮来使 ObjectDataSource 选择并使用两个日期选择器值,但这根本不起作用。就好像 ObjectDataSource 没有咨询 GridView 来获取起始索引等。

如果有人知道类似此设置的示例(GridView、日期控件、按钮、ObjectDataSource),那就太好了。

编辑:这是代码。

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<asp:Label ID="Label39" CssClass="txtSelect" runat="server" Text="Start Date" />
<cc1:datepicker ID="startDatePicker" runat="server" Width="70px" PaneWidth="150px" SelectedDate="1/1/2000">
<panetablestyle bordercolor="#707070" borderwidth="1px" borderstyle="Solid" />
<paneheaderstyle backcolor="#0099FF" />
<titlestyle forecolor="White" font-bold="true" />
<nextprevmonthstyle forecolor="White" font-bold="true" />
<nextprevyearstyle forecolor="#E0E0E0" font-bold="true" />
<dayheaderstyle backcolor="#E8E8E8" />
<todaystyle backcolor="#FFFFCC" forecolor="#000000" font-underline="false" bordercolor="#FFCC99" />
<alternatemonthstyle backcolor="#F0F0F0" forecolor="#707070" font-underline="false" />
<monthstyle backcolor="" forecolor="#000000" font-underline="false" />
</cc1:datepicker>

<asp:Label ID="Label5" CssClass="txtSelect" runat="server" Text="End Date" />
<cc1:datepicker ID="endDatePicker" runat="server" Width="70px" PaneWidth="150px" SelectedDate="1/1/2020">
<panetablestyle bordercolor="#707070" borderwidth="1px" borderstyle="Solid" />
<paneheaderstyle backcolor="#0099FF" />
<titlestyle forecolor="White" font-bold="true" />
<nextprevmonthstyle forecolor="White" font-bold="true" />
<nextprevyearstyle forecolor="#E0E0E0" font-bold="true" />
<dayheaderstyle backcolor="#E8E8E8" />
<todaystyle backcolor="#FFFFCC" forecolor="#000000" font-underline="false" bordercolor="#FFCC99" />
<alternatemonthstyle backcolor="#F0F0F0" forecolor="#707070" font-underline="false" />
<monthstyle backcolor="" forecolor="#000000" font-underline="false" />
</cc1:datepicker>

<asp:Button ID="RetrieveButton" runat="server" Text="Retrieve" OnClick="RetrieveButton_Click" />

<asp:GridView ID="creditRateGridView" runat="server"
DataSourceID="creditRateObjectDataSource"
AllowPaging="true"
AllowSorting="true"
PageSize="10"
Width="900"
AutoGenerateColumns="False"
DataKeyNames="EFFECTIVE_DATE"
GridLines="Both"
EnableSortingAndPagingCallbacks="true">
<Columns>
<asp:BoundField DataField="EFFECTIVE_DATE" HeaderText="Effective Date"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="EFFECTIVE_DATE" DataFormatString="{0:d}" />
<asp:BoundField DataField="REFERENCE_DATE" HeaderText="Reference Date"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="REFERENCE_DATE" DataFormatString="{0:d}" />
<asp:BoundField DataField="GROSS_CREDIT_USED_RATE" HeaderText="Credit Rate"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="GROSS_CREDIT_USED_RATE" DataFormatString="{0:p}" />
<asp:BoundField DataField="ANNUALIZED_YIELD_ACTUAL_AVERAGE_RATE" HeaderText="Yield"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="ANNUALIZED_YIELD_ACTUAL_AVERAGE_RATE" DataFormatString="{0:p}" />
<asp:BoundField DataField="DURATION_USED_YEAR" HeaderText="Duration"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="DURATION_USED_YEAR" DataFormatString="{0:n2}" />
<asp:BoundField DataField="BOOK_VALUE_USED_AMOUNT" HeaderText="Book Value"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="BOOK_VALUE_USED_AMOUNT" DataFormatString="{0:c}" />
<asp:BoundField DataField="MARKET_VALUE_USED_AMOUNT" HeaderText="Market Value"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="MARKET_VALUE_USED_AMOUNT" DataFormatString="{0:c}" />
<asp:BoundField DataField="MV_BV_RATE" HeaderText="MV/BV Ratio"
ItemStyle-HorizontalAlign="Right" ReadOnly="True"
SortExpression="MV_BV_RATE" DataFormatString="{0:p}" />
</Columns>
<PagerSettings Mode="NumericFirstLast" FirstPageText="First" LastPageText="Last" />
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>

<asp:ObjectDataSource ID="creditRateObjectDataSource" runat="server"
EnablePaging="true"
TypeName="AegonSVS.Restricted.CreditRateHistory"
SelectMethod="CreditRateSelectMethod"
StartRowIndexParameterName="startRowIndex"
MaximumRowsParameterName="maximumRows"
SortParameterName="sortExpression"
SelectCountMethod="CreditRateSelectCountMethod" />

</asp:Content>


public partial class CreditRateHistory : System.Web.UI.Page
{
private const int contractId = 1;

protected void Page_Load(object sender, EventArgs e)
{
Session.Add("startDateTime", startDatePicker.SelectedDate);
Session.Add("endDateTime", endDatePicker.SelectedDate);
}

public DataTable CreditRateSelectMethod(int startRowIndex, int maximumRows, string sortExpression)
{
var startDateTime = (DateTime)Session["startDateTime"];
var endDateTime = (DateTime)Session["endDateTime"];

DataTable dataTable = Sql.GetCreditRateHistoryPagedRecords(startDateTime,
endDateTime,
contractId,
startRowIndex,
maximumRows,
sortExpression,
null);
return dataTable;
}

public int CreditRateSelectCountMethod()
{
var startDateTime = (DateTime)Session["startDateTime"];
var endDateTime = (DateTime)Session["endDateTime"];

return Sql.GetCreditRateRowCount(startDateTime,
endDateTime,
contractId,
null);
}

protected void RetrieveButton_Click(object sender, EventArgs e)
{
// So something with this return? How?
IEnumerable dataSource = creditRateObjectDataSource.Select();
creditRateGridView.DataBind();
}

}

最佳答案

听起来您希望 ObjectDataSource 中的代码能够访问您的 Page 对象及其子对象。一般来说,它不是这样工作的。 ObjectDataSource 中的代码需要独立,这意味着如果您需要使用几个日期过滤 SQL SELECT,这些日期应作为参数发送。

如果您可以发布您的 ObjectDataSource 标记和 DAL 对象的类代码,我可以提供一个具体示例。

但是,您的问题的一般答案可以在本文中找到:

MSDN: Using Parameters with the ObjectDataSource Control

<小时/>

使用当前 Page 类作为 ObjectDataSource.TypeName 的问题是,每次 ObjectDataSource 绑定(bind)时,它都会创建一个新的实例要使用的类(有警告,但这在这里并不重要)。这就是为什么您无法读取控制值但可以读取 session 的原因。这就是为什么您不能依赖于从 SelectMethod 中直接访问页面上的项目。您需要将查询参数作为 SelectMethod 的参数传递。

看起来您已经有一个名为 Sql 的类,其中包含设置为进行数据访问的(共享?)方法。这是您的 creditRateObjectDataSource.TypeName 应该引用的类。然后将 CreditRateObjectDataSource.SelectMethod 设为 sql.GetCreditRateHistoryPagedRecords,类似于此示例:

<asp:ObjectDataSource ID="creditRateObjectDataSource" runat="server" EnablePaging="true"
TypeName="AegonSVS.Restricted.sql" SelectMethod="GetCreditRateHistoryPagedRecords"
StartRowIndexParameterName="startRowIndex" MaximumRowsParameterName="maximumRows"
SortParameterName="sortExpression" SelectCountMethod="CreditRateSelectCountMethod">
<SelectParameters>
<asp:ControlParameter Name="startDateTime" ControlID="startDatePicker" PropertyName="SelectedDate"
DbType="DateTime" />
<asp:ControlParameter Name="endDateTime" ControlID="endDatePicker" PropertyName="SelectedDate"
DbType="DateTime" />
<asp:Parameter Name="contractId" DefaultValue="1" DbType="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

关于asp.net - ObjectDataSource 选择方法不能 'see' 任何其他控件的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com