如果有可能改进以下代码,我会喜欢它。
我必须在我的页面上显示DropDownList(显示每个类别),一个用于过滤帖子,另一个用于创建新帖子。这是代码:
if (!IsPostBack)
{
ddlCategory.DataSource = BindDDlCategory();
if (!IsPostBack)
{
ddlCategory.DataTextField = "Name";
ddlCategory.DataValueField = "Id";
}
ddlCategory.DataBind();
if (ddlCategory.Items.Count == 0)
ddlCategory.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true));
else
ddlCategory.Items.Insert(0, new ListItem("Todas as categorias", "108", true));
ddlCategoryNP.DataSource = BindDDlCategory();
if (!IsPostBack)
{
ddlCategoryNP.DataTextField = "Name";
ddlCategoryNP.DataValueField = "Id";
}
ddlCategoryNP.DataBind();
if (ddlCategoryNP.Items.Count == 0)
ddlCategoryNP.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true));
else
ddlCategoryNP.Items.Insert(0, new ListItem("Escolha uma categoria", "108", true));
}
方法BindDDlCategory是:
protected DataTable BindDDlCategory()
{
Read readCategoryNP = new Read();
return readCategoryNP.Category();
}
readCategoryNP向我展示了我数据库中的DataTable。
答案 0 :(得分:3)
我同意@Kemal这应该是代码审查。这是我的2美分:
-- your code, reduced
if (!IsPostBack)
{
var dataSource = BindDDlCategory();
PrepareDDL(ddlCategory, dataSource);
PrepareDDL(ddlCategoryNP, dataSource);
}
-- new method
private void PrepareDDL(DropDownList ddl, DataTable dataSource)
{
ddl.DataSource = dataSource;
ddl.DataTextField = "Name";
ddl.DataValueField = "Id";
ddl.DataBind();
string message = ddl.Items.Count
? "Não há nenhuma categoria cadastrada"
: "Todas as categorias";
ddl.Items.Insert(0, new ListItem(message, "108", true));
}
-- and the existing method
protected DataTable BindDDlCategory()
{
return new Read().Category();
}
答案 1 :(得分:0)
您的方法中有2个代码块在执行绑定时与正在操作的ddl相同。为什么不创建一个以ddl作为参数的方法,然后将绑定应用于它。干:) :)
答案 2 :(得分:0)
也许:
if (!IsPostBack)
{
BindCategory();
}
protected void BindCategory()
{
ddlCategory.DataSource = BindDDlCategory();
ddlCategory.DataTextField = "Name";
ddlCategory.DataValueField = "Id";
ddlCategory.DataBind();
string aditionalItem = (ddlCategory.Items.Count == 0) ? "Não há nenhuma categoria cadastrada" : "Todas as categorias"
ddlCategory.Items.Insert(0, new ListItem(aditionalItem, "108", true));
//since both are equas, bind here in order to avoid calling BindDDlCategory() again:
ddlCategoryNP.DataSource = BindDDlCategory();
ddlCategoryNP.DataTextField = "Name";
ddlCategoryNP.DataValueField = "Id";
ddlCategoryNP.DataBind();
ddlCategoryNP.Items.Insert(0, new ListItem(aditionalItem, "108", true));
}