gpt4 book ai didi

c# - 需要帮助通过类访问 DropDownList

转载 作者:行者123 更新时间:2023-11-30 21:01:21 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何访问和存储下拉列表中的选择,以便在 mainSQL 类的 SELECT 命令中使用。

这是具体的。

DropDownList(在名为 Page.aspx 的页面上):

    <asp:DropDownList 
ID="selectInfo1"
runat="server"
AutoPostBack="True"
DataTextField="Info1"
DataValueField="Info1Key"
DataSourceID="SqlDB" >
</asp:DropDownList>

我试图访问 DDL 的函数(在单独的类文件中):

public List<ListInfo> getList()
{
List<ListInfo> sList = new List<ListInfo>();
ListInfo objList = null;
//This is where I need to declare a variable called Info1Key and set it to the value of the ddl!
string queryString = "SELECT [UniqueID], [Date], [Info1], [Info2], [Info3] FROM [ReportedSales] WHERE ([Info1] = ' " + Info1Key + "') ORDER BY [Date]";
using (SqlConnection connection = new SqlConnection(sqlConString))
{
using (SqlCommand command = new SqlCommand(queryString, connection))
{
command.Connection.Open();
using (SqlDataReader dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
objList = new ListInfo();
objList.ID = Convert.ToInt16(dataReader["UniqueID"]);
objList.Date = Convert.ToDateTime(dataReader["Date"]);
objList.Info1 = (dataReader["Info1"] as int?) ?? 0;
objList.Info2 = (dataReader["Info2"] as int?) ?? 0;
objList.Info3 = (dataReader["Info3"] as int?) ?? 0;
sList.Add(objList);
}
}
}
}
return sList;
}

这是调用 getList 方法的唯一函数(我很确定)--

    private void FillListActivity()
{
List<ListInfo> objList = new List<ListInfo>();
objList = new mainSQL().getList();

ReportingGV.DataSource = objList;
ReportingGV.DataBind();
}

新问题——当我更改 DDL 时,GV 不再更改。

我可以解决这个问题的一种方法是更改​​ Page.aspx.cs 中的 Page_Load,如下所示:

最初:

 protected void Page_Load(object sender, EventArgs e)
{
if(!isPostBack)
{
FillSalesActivity();
}
}

工作正常,但我会遇到问题吗?:

    protected void Page_Load(object sender, EventArgs e)
{
FillSalesActivity();
}

最佳答案

您不希望您的外部类了解或关心有关 UI 元素(例如下拉列表)的任何信息。它们应尽可能与 UI 无关。

在这种情况下,您要做的是将值传递给函数。因此,您需要将函数签名更改为如下所示:

public List<ListInfo> getList(string Info1Key)
{
// The code is the same, just use the Info1Key parameter that's been passed to the function.
}

然后你会像这样调用这个函数:

private void FillSalesActivity()
{
List<SalesInfo> objSalesList = new List<SalesInfo>();
objSalesList = new mainSQL().getSalesList(selectInfo1.SelectedValue);

SalesReportingGV.DataSource = objSalesList;
SalesReportingGV.DataBind();
}

一些注意事项:

  • 您需要在页面上包含错误检查,以确保在调用该函数之前有一个值 SelectedValue
  • 您应该真正地研究 SQL 注入(inject)漏洞,因为您的代码有一个。 永远不要隐含地信任来自客户端的值,即使它来自下拉列表并且您认为您可以控制这些值。你不知道。客户端可以选择发送他们想要的任何值,并且该值可以包含 SQL 代码,您的函数将以其所需的所有权限愉快地对您的数据库运行。考虑使用“参数化查询”,或者更好的是,使用 ORM 框架。 Linq To Sql 之类的东西设置起来非常快,学习曲线低,可以为您提供很多功能。

关于c# - 需要帮助通过类访问 DropDownList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224402/

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