【问题标题】:Using DropDownList as paging function in ASP.Net Formview在 ASP.Net Formview 中使用 DropDownList 作为分页功能
【发布时间】:2011-10-11 18:24:50
【问题描述】:

我有一个 Formview,在选择下拉列表时会填充 SQL 数据,但是当我单击编辑时,它想编辑下拉列表中的第一项,因为从技术上讲,它仍然认为它在第一页上。我希望将分页链接到下拉列表,但我不确定如何完成此操作。我有很多字段,所以我不会发布完整的 Formview,但这里是关键部分。

Formview 项目模板:

<ItemTemplate>
          <table id="FormTable">
          <tr><th>
        <asp:DropDownList ID="ProjectNameDropDown" runat="server" AutoPostBack="true"  
        DataSourceID="SqlDataSource1" 
        DataValueField="Project_Name" name="Text" OnSelectedIndexChanged="ProjectSelect" AppendDataBoundItems="true">              
        <asp:ListItem Text="Select a Project" />
        </asp:DropDownList>
        <asp:Panel ID="Panel1" runat="server" Visible="false">             
          </th>
          <th>
            <asp:Button ID="EditButton" runat="server" CausesValidation="False" 
                CommandName="Edit" Text="Edit" />
            &nbsp;<asp:Button ID="DeleteButton" runat="server" CausesValidation="False" 
                CommandName="Delete" Text="Delete" />
            &nbsp;<asp:Button ID="NewButton" runat="server" CausesValidation="False" 
                CommandName="New" Text="New" />                 
          </th></tr>            
           <tr><th>                
            Business Category:
          </th><td>
            <asp:Label ID="BusinessCategoryLabel" runat="server" 
                Text='<%# Bind("Business_Category") %>'
                 />
            </td></tr>
          <tr><th>
            Project Description:
          </th><td>
            <asp:TextBox ID="ProjectDescriptionLabel" runat="server" ReadOnly="true"
                Text='<%# Bind("Project_Description") %>' TextMode="MultiLine" Rows="5" />
            </td></tr>
          <tr><th>
            Operations Owner:
          </th><td>
            <asp:Label ID="OwnerLabel" runat="server" 
                Text='<%# Bind("Operations_Owner") %>' />
            </td></tr>

代码背后:

protected void ProjectSelect(object sender, EventArgs e)
    {
        DropDownList ProjectNameDropDown = (DropDownList)FormView1.FindControl("ProjectNameDropDown");
        Panel Panel1 = (Panel)FormView1.FindControl("Panel1");
        Label BusinessCategoryLabel = (Label)FormView1.FindControl("BusinessCategoryLabel");
        TextBox ProjectDescriptionLabel = (TextBox)FormView1.FindControl("ProjectDescriptionLabel");
        Label OwnerLabel = (Label)FormView1.FindControl("OwnerLabel");
        Label StakeholderLabel = (Label)FormView1.FindControl("StakeholderLabel");
        Label ReqOrgLabel = (Label)FormView1.FindControl("ReqOrgLabel");
        Label PriorityLabel = (Label)FormView1.FindControl("PriorityLabel");
        Label DateInitiatedLabel = (Label)FormView1.FindControl("DateInitiatedLabel");
        Label ReqCompletionDateLabel = (Label)FormView1.FindControl("ReqCompletionDateLabel");
        Label ProjectLOELabel = (Label)FormView1.FindControl("ProjectLOELabel");
        Label OELabel = (Label)FormView1.FindControl("OELabel");
        Label PELabel = (Label)FormView1.FindControl("PELabel");
        Label EMLabel = (Label)FormView1.FindControl("EMLabel");
        Label PARCHLabel = (Label)FormView1.FindControl("PARCHLabel");
        Label WindowsLabel = (Label)FormView1.FindControl("WindowsLabel");
        Label StorageLabel = (Label)FormView1.FindControl("StorageLabel");
        Label NetworkLabel = (Label)FormView1.FindControl("NetworkLabel");
        Label Unix2Label = (Label)FormView1.FindControl("Unix2Label");
        Label TSGLabel = (Label)FormView1.FindControl("TSGLabel");
        Label SANDLabel = (Label)FormView1.FindControl("SANDLabel");
        Label MOPSLabel = (Label)FormView1.FindControl("MOPSLabel");
        Label ACSROpsLabel = (Label)FormView1.FindControl("ACSROpsLabel");
        Label IMOpsLabel = (Label)FormView1.FindControl("IMOpsLabel");
        Label OSCOpsLabel = (Label)FormView1.FindControl("OSCOpsLabel");
        Label FinancialSvcsLabel = (Label)FormView1.FindControl("FinancialSvcsLabel");
        Label VantageLabel = (Label)FormView1.FindControl("VantageLabel");
        Label VoiceSysOpsLabel = (Label)FormView1.FindControl("VoiceSysOpsLabel");
        Label VoiceAppOpsLabel = (Label)FormView1.FindControl("VoiceAppOpsLabel");
        Label ACPxOpsLabel = (Label)FormView1.FindControl("ACPxOpsLabel");
        Label WFXOpsLabel = (Label)FormView1.FindControl("WFXOpsLabel");
        Label WebOpsLabel = (Label)FormView1.FindControl("WebOpsLabel");
        Label DBALabel = (Label)FormView1.FindControl("DBALabel");
        Label CapacityPlanningLabel = (Label)FormView1.FindControl("CapacityPlanningLabel");
        Label BCPLabel = (Label)FormView1.FindControl("BCPLabel");
        Label DataCenterLabel = (Label)FormView1.FindControl("DataCenterLabel");
        Label GoldsmithLabel = (Label)FormView1.FindControl("GoldsmithLabel");
        Label AmericasITOpsLabel = (Label)FormView1.FindControl("AmericasITOpsLabel");
        Label APACITOpsLabel = (Label)FormView1.FindControl("APACITOpsLabel");
        Label EMEAITOpsLabel = (Label)FormView1.FindControl("EMEAITOpsLabel");

        Panel1.Visible = true;
        if (ProjectNameDropDown.Items.FindByText("Select a Project").Selected != true)
        {




            string myConnectionString = @"Data Source=odcsgwinsql11.devcsg.com\ss2008;Initial Catalog=hulc01;Integrated Security=True";
            SqlConnection myConnection = new SqlConnection(myConnectionString);
            string MySelectQuery = "SELECT * FROM Common WHERE Project_Name = '" + ProjectNameDropDown.SelectedValue + "'";

            using (SqlCommand cmd = new SqlCommand(MySelectQuery))
            {
                cmd.Connection = myConnection;
                myConnection.Open();

                SqlDataAdapter Adapter1 = new SqlDataAdapter(cmd);
                DataSet dset = new DataSet();
                Adapter1.Fill(dset);
                BusinessCategoryLabel.Text = dset.Tables[0].Rows[0]["Business_Category"].ToString();
                ProjectDescriptionLabel.Text = dset.Tables[0].Rows[0]["Project_Description"].ToString();
                OwnerLabel.Text = dset.Tables[0].Rows[0]["Operations_Owner"].ToString();
                StakeholderLabel.Text = dset.Tables[0].Rows[0]["NonOps_Key_Stakeholder"].ToString();
                ReqOrgLabel.Text = dset.Tables[0].Rows[0]["Requesting_Organization"].ToString();
                PriorityLabel.Text = dset.Tables[0].Rows[0]["Priority"].ToString();
                DateInitiatedLabel.Text = dset.Tables[0].Rows[0]["Date_Initiated"].ToString();
                ReqCompletionDateLabel.Text = dset.Tables[0].Rows[0]["Required_Completion_Date"].ToString();
                ProjectLOELabel.Text = dset.Tables[0].Rows[0]["Project_LOE"].ToString();
                OELabel.Text = dset.Tables[0].Rows[0]["OE"].ToString();
                PELabel.Text = dset.Tables[0].Rows[0]["PE"].ToString();
                EMLabel.Text = dset.Tables[0].Rows[0]["EM"].ToString();
                PARCHLabel.Text = dset.Tables[0].Rows[0]["PARCH"].ToString();
                WindowsLabel.Text = dset.Tables[0].Rows[0]["Windows"].ToString();
                StorageLabel.Text = dset.Tables[0].Rows[0]["Storage"].ToString();
                NetworkLabel.Text = dset.Tables[0].Rows[0]["Network"].ToString();
                Unix2Label.Text = dset.Tables[0].Rows[0]["UNIX2"].ToString();
                TSGLabel.Text = dset.Tables[0].Rows[0]["TSG"].ToString();
                SANDLabel.Text = dset.Tables[0].Rows[0]["SAND"].ToString();
                MOPSLabel.Text = dset.Tables[0].Rows[0]["MOPS"].ToString();
                ACSROpsLabel.Text = dset.Tables[0].Rows[0]["ACSR_Ops"].ToString();
                IMOpsLabel.Text = dset.Tables[0].Rows[0]["IM_Ops"].ToString();
                OSCOpsLabel.Text = dset.Tables[0].Rows[0]["OSC_Ops"].ToString();
                FinancialSvcsLabel.Text = dset.Tables[0].Rows[0]["Financial_Svcs"].ToString();
                VantageLabel.Text = dset.Tables[0].Rows[0]["Vantage"].ToString();
                VoiceAppOpsLabel.Text = dset.Tables[0].Rows[0]["Voice_Sys_Ops"].ToString();
                VoiceSysOpsLabel.Text = dset.Tables[0].Rows[0]["Voice_App_Ops"].ToString();
                ACPxOpsLabel.Text = dset.Tables[0].Rows[0]["ACPX_Ops"].ToString();
                WFXOpsLabel.Text = dset.Tables[0].Rows[0]["WFX_Ops"].ToString();
                WebOpsLabel.Text = dset.Tables[0].Rows[0]["Web_Ops"].ToString();
                DBALabel.Text = dset.Tables[0].Rows[0]["DBA"].ToString();
                CapacityPlanningLabel.Text = dset.Tables[0].Rows[0]["Capacity_Planning"].ToString();
                BCPLabel.Text = dset.Tables[0].Rows[0]["BCP"].ToString();
                DataCenterLabel.Text = dset.Tables[0].Rows[0]["Data_Center"].ToString();
                GoldsmithLabel.Text = dset.Tables[0].Rows[0]["Goldsmith"].ToString();
                AmericasITOpsLabel.Text = dset.Tables[0].Rows[0]["Americas_IT_Ops"].ToString();
                APACITOpsLabel.Text = dset.Tables[0].Rows[0]["APAC_IT_Ops"].ToString();
                EMEAITOpsLabel.Text = dset.Tables[0].Rows[0]["EMEA_IT_Ops"].ToString();
            }
        }

我想以某种方式告诉 Formview 从下拉列表中选择时要切换到哪个页面,但我无法弄清楚它的编码。感谢您的帮助!

【问题讨论】:

  • 实际上,除了作为评论之外,您还需要告诉原始发帖人哪些其他选择?

标签: c# asp.net sql drop-down-menu formview


【解决方案1】:

执行此操作的一种方法(我过去做过的方法)是将您的数据绑定 DropDownList 移到 FormView 之外。然后,将您的FormView 绑定到依赖于DropDownLists SelectedValue 的不同SQLDataSource。因此,您将拥有一个包含所有项目名称的 DDL:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
    DataSourceID="SqlDataSource1" DataTextField="Project_Name" 
    DataValueField="Project_Name">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Your Connection String" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT DISTINCT [Project_Name] FROM [ProjectTable]">
</asp:SqlDataSource>

和一个 FormView 取决于在 DDL 中选择的内容:

<asp:FormView ID="FormView1" runat="server" AllowPaging="True" 
    DataKeyNames="Project_Name" DataSourceID="SqlDataSource2">
...
</asp:FormView>

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="Your Connection String" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT * FROM [ProjectTable] WHERE Project_Name=@Project_Name">
    <SelectParameters>
        <asp:ControlParameter ControlID="DropDownList1" Name="Project_Name" 
            PropertyName="SelectedValue" />
    </SelectParameters>
</asp:SqlDataSource>

这样,当您点击FormView 中的“编辑”按钮时,您正在编辑您打算编辑的记录。

作为旁注,您的代码隐藏使您非常容易受到 SQL 注入的攻击。我会小心的。您应该使用参数化查询,而不是使用字符串连接来生成该 SELECT 查询

【讨论】:

  • 完美运行。我什至不需要后面的代码来填充字段。再次感谢您的帮助!我本来打算让 MIS 修复我所有的安全漏洞... =)
  • @Chris 哈哈,太棒了。很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多