3つのセッション変数を使用する単純なGridViewがあります。 SQL Server 2012データベースのストアドプロシージャの入力パラメータとして、ユーザーログイン時にキャプチャされるCoName、およびPurchaseOrderDate、およびHeatNumber(これらはオプションです)をテキストボックスに取り込みます。 CustomerLanding.aspxページに検索ボタンがあり、そのボタンをクリックすると、現在GridViewがあるTestReportLanding.aspxページにユーザーがリダイレクトされます。このシナリオでは、すべてが機能します。GridViewが行を返さない
GridViewをCustomerLanding.aspxに移動したいので、検索パラメータと検索ボタンがある同じページに検索結果を表示できます。最終的には、AJAXを使用してアップデートしたいと思いますが、今はGridViewを別のdivに配置しています。この設定を使用すると、オプションのパラメータ(PurchaseOrderDateおよびHeatNumber)が指定されている場合にのみクエリが返されます。私のストアドプロシージャは、それが検索のためにCoNameを必要とするので、オプションのパラメータを空にして、もっと多くの行を返す必要があります。
.NETに若干新しくなっているので、私はここで単純なものが欠けていると思っています。ここで
は私のGridViewのコードは、SqlDataSourceコントロールと一緒にCustomerLandingである:
<div class="col-xs-12 col-lg-10">
<asp:Label ID="NoRecordsFound" runat="server" Visible ="false" Text="No records found."></asp:Label>
<asp:GridView ID="GridView1" runat="server" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" GridLines="Vertical" BackColor="White" ForeColor="Black" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
<AlternatingRowStyle BackColor="#CCCCCC" />
<Columns>
<asp:BoundField DataField="doc" HeaderText="doc" SortExpression="doc" />
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
<asp:BoundField DataField="Heat" HeaderText="Heat" SortExpression="Heat" />
<asp:BoundField DataField="Dir" HeaderText="Dir" SortExpression="Dir" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:iiConnectionString %>" SelectCommand="sp_test_reports" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:SessionParameter Name="CustomerName" SessionField="CoName" Type="String" />
<asp:SessionParameter DbType="Date" Name="Date" SessionField="PurchaseOrderDate" />
<asp:SessionParameter Name="Heat" SessionField="HeatNumber" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</div>
そして、何、それはここに価値があることは私のストアドプロシージャであるため、データグリッドがあるとき、それは動作しますので、(私はこれは問題ではありません確信しています別々のページに:
CREATE PROCEDURE [dbo].[sp_test_reports]
-- Add the parameters for the stored procedure here
@CustomerName varchar(50),
@Date date,
@Heat varchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF @Heat IS NULL AND @Date IS NULL
SELECT DISTINCT TOP 1000 d.doc, d.Date, dl.Heat, d.Dir
FROM documents d
INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc
WHERE d.type = 2 and d.Customer = @CustomerName;
ELSE IF @Heat IS NOT NULL AND @Date IS NULL
SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir
FROM documents d
INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc
WHERE d.type = 2 AND d.Customer = @CustomerName AND dl.Heat = @Heat;
ELSE IF @Heat IS NULL AND @Date IS NOT NULL
SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir
FROM documents d
INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc
WHERE d.type = 2 AND d.Customer = @CustomerName AND d.Date = @Date;
ELSE IF @Heat IS NOT NULL AND @Date IS NOT NULL
SELECT DISTINCT(d.doc), d.Date, dl.Heat, d.Dir
FROM documents d
INNER JOIN Documents_Line_Items dl ON d.Doc = dl.Doc
WHERE d.type = 2 AND d.Customer = @CustomerName AND d.Date = @Date AND dl.Heat = @Heat;
END
そして、ここに私の検索ボタンの背後にあるコードです:。 注私はここのResponse.Redirectのコメントを外した場合に、GridViewコントロールはそれが必要のように動作していることが
protected void TestReports_Click(object sender, EventArgs e)
{
Session["PurchaseOrderDate"] = DatePurchaseOrder.Text;
Session["HeatNumber"] = HeatText.Text;
GridView1.Visible = true;
MessageBox.Show(Session["CoName"].ToString());
MessageBox.Show(Session["HeatNumber"].ToString());
if (GridView1.Rows.Count == 0)
{
NoRecordsFound.Visible = true;
}
else
{
NoRecordsFound.Visible = false;
}
//Response.Redirect("TestReportLanding.aspx", false);
}
ご協力いただきありがとうございます。
私はやったが、まだレコードを取得していない。このspは、ユーザーを別のページにリダイレクトするときに機能することに注意してください。私はDateとHeatをNULLに初期化しますが、意味があります。 – CuriousOne
2つのオプションフィールドにセッション変数を使用する特別な理由はありますか?これらのパラメータをasp:controlパラメータに変更することもできます: –
BenM
結果が得られたら興味がありますボタンを2回押すとページが投稿(またはリダイレクト)されるまで、セッションにテキストボックスの値を保存しない、ある種の奇妙なポストバックの問題かもしれません。 – BenM