2012-03-13 8 views
0

私はSuggstions Boxとして動作するイントラネットWebアプリケーションを開発しています。管理者は、提出されたすべての提案のリストをGridViewに表示し、GridViewに追加されたDropDownListを通じてこれらの提案を受け入れるか拒否するかを知ることができます。このGridViewの上部には、これらの提案の1つを提出したユーザーの部門に基づいて提案をフィルタリングするDropDownListがあります。このDropDownList(フィルタ)をこのGridViewで再び使用させるにはどうすればいいですか?

さらに、このGridViewの下には、ステータスが[Accepted]または[Rejected]として表示される別のGridViewがあります。このGridViewは、管理者が提案の1つを受け入れるか拒否するたびに直ちに更新されます。また、管理者はこのGridViewを印刷することができます。

UpdatePanelコントロールの中で2番目のGridViewを追加する前にすべてうまくいきましたが、最初のGridViewの提案をフィルタリングするフィルタは機能しません。何か案が?助けてください?

私のASP.NETコード:

<strong> Division </strong> 
    <asp:DropDownList ID="ddlDivision" runat="server" AppendDataBoundItems="True" 
     AutoPostBack="True" DataSourceID="sqlDataSourceDivision" DataTextField="DivisionShortcut" 
     DataValueField="DivisionShortcut" 
     Width="175px" EnableViewState="False"> 
     <asp:ListItem Value="%">All</asp:ListItem> 
    </asp:DropDownList> 


    <br /> <br /> 

     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
         AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID" 
         width="950px" CssClass="mGrid" 
         AlternatingRowStyle-CssClass="alt" 
         RowStyle-HorizontalAlign="Center" 
         DataSourceID="SqlDataSource1" 
         OnRowDataBound="GridView1_RowDataBound" > 
      <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
      <HeaderStyle Font-Bold = "true" ForeColor="Black" Height="20px"/> 
      <Columns> 
       <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
        ReadOnly="True" SortExpression="ID" /> 
       <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
       <asp:BoundField DataField="Description" HeaderText="Description" 
        SortExpression="Description" /> 
       <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
       <asp:BoundField DataField="Username" HeaderText="Username" 
        SortExpression="Username" /> 
       <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" 
        SortExpression="DivisionShortcut" /> 
       <asp:TemplateField HeaderText="Status"> 
        <ItemTemplate> 
         <asp:DropDownList ID="DropDownList" runat="server" DataSourceID="SqlDataSource2" 
              Font-Bold="True" ForeColor="#006666" AppendDataBoundItems="false" 
              DataTextField="Status" DataValueField="ID" AutoPostBack="true" 
              OnDataBound="DropDownList_DataBound" OnSelectedIndexChanged ="DropDownList_SelectedIndexChanged"> 
         </asp:DropDownList> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
      SelectCommand="SELECT  dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, 
         dbo.Divisions.DivisionShortcut 
FROM   dbo.employee INNER JOIN 
         dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode" 
         FilterExpression="[DivisionShortcut] like '{0}%'"> 

         <FilterParameters> 
         <asp:ControlParameter ControlID="ddlDivision" Name="DivisionShortcut" 
               PropertyName="SelectedValue" Type="String" /> 
        </FilterParameters> 
     </asp:SqlDataSource> 

     <%--For the DropDownList--%> 
     <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
          ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
          SelectCommand="SELECT * FROM [SafetySuggestionsStatus]"> 
     </asp:SqlDataSource> 

     <%--Filtering by Division--%> 
     <asp:SqlDataSource ID="sqlDataSourceDivision" runat="server" 
     ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
     SelectCommand="SELECT [DivisionShortcut] FROM [Divisions]"></asp:SqlDataSource> 

     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlDivision" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
      <br /> 

       <p><h3><b><u>PMOD Divisions' Safety Suggestions List</u></b></h3> 
        <p> 
        </p> 
        <br /> 
        <asp:Panel ID="Panel1" runat="server"> 
         <asp:GridView ID="GridView2" runat="server" AllowSorting="True" 
          AlternatingRowStyle-CssClass="alt" AutoGenerateColumns="False" CssClass="mGrid" 
          DataSourceID="SqlDataSource4" RowStyle-HorizontalAlign="Center"> 
          <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
          <HeaderStyle Font-Bold="true" ForeColor="Black" Height="20px" /> 
          <Columns> 
           <asp:BoundField DataField="SubmittedMonth" HeaderText="Month Submitted" 
            ReadOnly="True" SortExpression="SubmittedMonth" /> 
           <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" 
            SortExpression="DivisionShortcut" /> 
           <asp:BoundField DataField="Username" HeaderText="NetworkID" 
            SortExpression="Username" /> 
           <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
           <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
           <asp:BoundField DataField="Description" HeaderText="Description" 
            SortExpression="Description" /> 
           <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
           <asp:BoundField DataField="Status" HeaderText="Status" 
            SortExpression="Status" /> 
          </Columns> 
          <RowStyle HorizontalAlign="Center" /> 
         </asp:GridView> 
        </asp:Panel> 
        <asp:SqlDataSource ID="SqlDataSource4" runat="server" 
         ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT  TOP (100) PERCENT LEFT(DATENAME(month, dbo.SafetySuggestionsLog.DateSubmitted), 3) + '-' + DATENAME(year, dbo.SafetySuggestionsLog.DateSubmitted) 
         AS SubmittedMonth, dbo.Divisions.DivisionShortcut, dbo.SafetySuggestionsLog.Username, dbo.employee.Name, dbo.SafetySuggestionsLog.Title, 
         dbo.SafetySuggestionsLog.Description, dbo.SafetySuggestionsType.Type, dbo.SafetySuggestionsStatus.Status 
FROM   dbo.Divisions INNER JOIN 
         dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode INNER JOIN 
         dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN 
         dbo.SafetySuggestionsType ON dbo.SafetySuggestionsLog.TypeID = dbo.SafetySuggestionsType.ID INNER JOIN 
         dbo.SafetySuggestionsStatus ON dbo.SafetySuggestionsLog.StatusID = dbo.SafetySuggestionsStatus.ID 
WHERE  (DATEDIFF(month, dbo.SafetySuggestionsLog.DateSubmitted, GETDATE()) &lt; 3) 
ORDER BY dbo.SafetySuggestionsLog.DateSubmitted DESC"></asp:SqlDataSource> 
        <asp:Button ID="btnPrint" runat="server" OnClick="btnPrint_Click" 
         Text="Print" /> 
        <p> 
        </p> 
      </p>  


     </ContentTemplate> 
    </asp:UpdatePanel> 

コードビハインド:

protected void btnPrint_Click(object sender, EventArgs e) 
    { 
     Session["ctrl"] = Panel1; 
     ScriptManager.RegisterStartupScript(GridView2, GridView2.GetType(), "onclick", "window.open('Print.aspx','PrintMe','height=400px,width=800px,scrollbars=1');", true); 
    } 

    int i = 1; 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.Cells[0].Text = i.ToString(); 
      i++; 

     } 
    } 


    protected void DropDownList_DataBound(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      ((DropDownList)sender).Items.Insert(0, new ListItem("--Select--", "")); 
     } 
    } 

    protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList ddl = (DropDownList)sender; 
     int suggestionStatus = int.Parse(ddl.SelectedValue); 
     GridViewRow row = (GridViewRow)ddl.NamingContainer; 
     string strID = GridView1.DataKeys[row.RowIndex]["ID"].ToString(); 
     int ID = Int32.Parse(strID); 
     //For inserting the status in the database 
     string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdbTest;Integrated Security=True"; 
     string updateCommand = "UPDATE SafetySuggestionsLog SET [StatusID] = @StatusID WHERE [ID] = @ID"; 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 
      using (SqlCommand cmd = new SqlCommand(updateCommand, conn)) 
      { 
       cmd.Parameters.Clear(); 
       cmd.Parameters.AddWithValue("@StatusID", suggestionStatus); 
       cmd.Parameters.AddWithValue("@ID", ID); 
       cmd.ExecuteNonQuery(); 
      } 
      conn.Close(); 
     } 

     GridView2.DataBind(); 

    } 
+0

別のグリッドビューでの提案の代わりに、同じグリッドビュー内でそれらを表示しないでください。 –

+0

管理者は過去3か月間の提案を印刷する必要があるためです。それに加えて、彼は提案の状態を更新する責任があるテーブルの中にDropDownListを見たくない。 –

答えて

0
  1. あなたは第一グリッドのIDが何であるかを指定することはできますか?
  2. 私が想像できることは多分あなたはあなたのselectedIndexの変更イベントに手動でのUpdatePanelを更新していないことである

    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
         using (SqlCommand cmd = new SqlCommand(updateCommand, conn)) 
         { 
          cmd.Parameters.Clear(); 
          cmd.Parameters.AddWithValue("@StatusID", suggestionStatus); 
          cmd.Parameters.AddWithValue("@ID", ID); 
          conn.Open(); 
          cmd.ExecuteNonQuery(); 
         } 
        conn.Close(); 
    } 
        GridView2.DataBind(); 
        UpdatePanel1.Update(); 
    

はまた、あなたのASPXに設定

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
は、UpdateMode = "条件付き"
+0

ご協力ありがとうございますが、私の質問です:最初のGridViewの上にDropDownListがあります。このDropDownListは、ユーザーの分割に基づいて提案をフィルタリングするために使用されます。このDropDownListは、UpdatePanelコントロール内に2番目のGridViewを配置した後にはもう機能しません。なぜか、これとこれの関係は何かわかりません。何か案が? –

関連する問題