0

私はこれにどのようにアプローチするかよくわからないので、誰かが助けになるかもしれないアイデアを持っているかどうかを尋ねるのが最善だと思いました。

次のスキーマを使用してExchange2010メールボックスサーバーのパフォーマンスデータを格納するテーブルがSQLServerに格納されています。

CREATE TABLE [dbo].[2010_Perfmon_MBX]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Server] [varchar](50) NULL,
    [ObjectName] [varchar](100) NULL,
    [CounterName] [varchar](100) NULL,
    [InstanceName] [varchar](100) NULL,
    [Value] [decimal](18, 3) NULL,
    [DateTime] [datetime] NULL
)

また、C#で記述されたASP.NETWebサイトもあります。ユーザーがカスケード回答を選択できるようにしたいのですが、これにより、最終的に要求されたデータがGridView/Graphに返されます。

現在の私の主な課題は、エンドユーザーがすべての列から値を選択するまでデータが返されないようにする方法です。

このようにステージングしたい:

ユーザーは、データをプルするサーバーを求められます

SELECT DISTINCT(Server)
FROM 2010_Perfmon_MBX

彼らがサーバーを選ぶふりをしましょうMailboxServer.domain.com

SELECT DISTINCT(ObjectName)
FROM 2010_Perfmon_MBX
WHERE Server = 'MailboxServer.domain.com'

次に、サーバーに基づいて、ユーザーにMailboxServer.domain.comObjectNameの入力を求められます。'msexchangeis mailbox'彼らは例えば以下を選びます:

SELECT DISTINCT(CounterName)
FROM 2010_Perfmon_MBX
WHERE Server = 'MailboxServer.domain.com'
AND ObjectName = 'msexchangeis mailbox'

次に、ユーザーはを求められCounterNameます。彼らは選ぶ'active rpc threads'

SELECT DISTINCT(InstanceName)
FROM 2010_Perfmon_MBX
WHERE Server = 'MailboxServer.domain.com'
AND ObjectName = 'msexchangeis mailbox'
AND CounterName = 'active rpc threads'

最後に、彼らはを選びますInstanceName。この例では'Database20'。次に、完全なクエリが実行され、行われた選択に基づいてすべてのデータがプルバックされます。

SELECT *
FROM 2010_Perfmon_MBX
WHERE Server = 'MailboxServer.domain.com'
AND ObjectName = 'msexchangeis mailbox'
AND CounterName = 'active rpc threads'
AND InstanceName = 'Database20'

先に進んで選択を連鎖させることなく、選択の流れが機能することを保証する最もエレガントな方法は何ですか?

選択が動的であり、選択したサーバーのSQL Serverテーブルで使用可能なデータに基づいていることを確認する必要があるため、有効なデータのみを選択できます。

読んでくれてありがとう。

4

1 に答える 1

1

かなり広い質問なので、ここに広い答えがあります。WebアプリケーションはASP.NETWebFormsであると想定します。

  1. ユーザーの選択にはDropDownListコントロールを使用し、RequiredFieldValidatorコントロールを使用して、ユーザーが各コントロールから有効な選択を行うようにします。
  2. ドロップダウンリストをSELECTDISTINCTデータにバインドします
  3. ポストバックチェックのPage.IsValidに送信ボタンがあり、trueの場合は、データを取得してGridViewをバインドします。

アップデート

わかりました。利用可能な選択肢は、サーバーから始めて、前の選択肢に依存するとおっしゃっていると思います。その場合、各DropDownListを一度に1つずつ表示し、autopostbackプロパティをtrueに設定します。インデックスが変更されるたびに、後続のすべての依存DropDownListが再バインドされます。バリデーターコントロールを使用して、送信する前にユーザーがすべてのリストで選択を行ったことを確認することもできます。

aspx

<asp:DropDownList ID="ddlObjectName" runat="server" DataSourceId="dsObjectName" 
    OnDataBound="ddlObjectName_DataBound"></DropDownList>
<asp:RequiredFieldValidator ID="ddlObjectNameRequired" runat="server" 
        ControlToValidate="ddlObjectName" InitialValue="-1"
        ErrorMessage="Please select an Object Name.">
</asp:RequiredFieldValidator>

<asp:Button ID="Submit" runat="server" Text="Submit" OnClick="Submit_Click" />

aspx.cs

protected void ddlObjectName_DataBound(object sender, EventArgs e)
{
    ddlObjectName.Items.Insert(0, new ListItem("Please Select...", "-1"));
}

protected void Submit_Click(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        //Bind the data grid ...
    }
}
于 2012-09-30T16:54:20.067 に答える