0

我得到了一些 c# 代码,并被要求创建一个与之配套的标记 (.aspx) 文件。

我不是在寻求帮助来编写代码,而是在寻求如何去做。

这是代码:

public partial class search : Page
{
protected override void OnLoad(EventArgs e)
{
  int defaultCategory;
  try
  {
     defaultCategory = Int32.Parse(Request.QueryString["CategoryId"]);
  }
  catch (Exception ex)
  {
     defaultCategory = -1;
  }

  Results.DataSource = GetResults(defaultCategory);
  Results.DataBind();

  if (!Page.IsPostBack)
  {
     CategoryList.DataSource = GetCategories();
     CategoryList.DataTextField = "Name";
     CategoryList.DataValueField = "Id";
     CategoryList.DataBind();
     CategoryList.Items.Insert(0, new ListItem("All", "-1"));
     CategoryList.SelectedIndex = CategoryList.Items.IndexOf(CategoryList.Items.FindByValue(defaultCategory.ToString()));
     base.OnLoad(e);
  }         

}

private void Search_Click(object sender, EventArgs e)
{
  Results.DataSource = GetResults(Convert.ToInt32(CategoryList.SelectedValue));
  Results.DataBind();
}

private DataTable GetCategories()
{
  if (Cache["AllCategories"] != null)
  {
     return (DataTable) Cache["AllCategories"];
  }

  SqlConnection connection = new SqlConnection("Data Source=DB;Initial Catalog=Store;User Id=User;Password=PW;");
  string sql = string.Format("SELECT * From Categories");
  SqlCommand command = new SqlCommand(sql, connection);

  SqlDataAdapter da = new SqlDataAdapter(command);
  DataTable dt = new DataTable();

  da.Fill(dt);
  Cache.Insert("AllCategories", dt, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration);

  connection.Dispose();
  return dt;

}
private DataTable GetResults(int categoryId)
{
  SqlConnection connection = new SqlConnection("Data Source=DB;Initial Catalog=Store;User Id=User;Password=PW;");
  string sql = string.Format("SELECT * FROM Products P INNER JOIN Categories C on P.CategoryId = C.Id WHERE C.Id = {0} OR {0} = -1", categoryId);
  SqlCommand command = new SqlCommand(sql, connection);

  SqlDataAdapter da = new SqlDataAdapter(command);
  DataTable dt = new DataTable();

  da.Fill(dt);

  connection.Dispose();
  return dt;
}
}

编辑

在上面的代码中,Results 对象是什么,CategoryList 只是一个列表框吗?

4

1 回答 1

0

正如 Nilesh 所说,这似乎是一个搜索页面,您可以尝试使用 Visual Studio 创建一个 Webform,它只是将控件拖放到画布中,这将为代码窗口中的控件创建标记。

后面的代码似乎在执行以下操作,在 Get 请求时加载页面(当其 !Page.IsPostBack 时)页面将使用 GetCategories() 获取类别并用所有类别名称填充下拉列表“CategoryList”(默认选中一个是查询字符串中的默认类别 ID)。

搜索按钮采用下拉列表的选定值并调用 GetResults() 以获取数据表以填充网格视图“结果”。所以你需要 3 个控件(下拉列表、按钮、Gridview)在 web 窗体中具有这些名称..

于 2013-08-10T13:40:03.787 回答