如何改进以下代码

时间:2015-11-14 23:15:04

标签: c# asp.net

如果有可能改进以下代码,我会喜欢它。

我必须在我的页面上显示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。

3 个答案:

答案 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));    
}