C# 在asp.net中创建以按钮作为成员的类

C# 在asp.net中创建以按钮作为成员的类,c#,asp.net,webforms,C#,Asp.net,Webforms,我继承了一个asp.net web应用程序,它将信息传递给gridview。每行上都有不同的按钮和链接,并根据收到的信息启用/禁用这些按钮和链接。每一行都有一个很长的逻辑链来设置按钮,这使得阅读非常困难。有没有一种方法可以设置一类按钮以使其更易于阅读 不确定“按钮类”是什么意思,但可以创建自定义服务器控件作为按钮控件的包装,并提供一些额外的属性或方法来简化GridView逻辑 下面是我们构建的RadioButton包装的一个快速而肮脏的示例,它扩展了标准单选按钮的属性,因此可以保存额外的信息。您

我继承了一个asp.net web应用程序,它将信息传递给gridview。每行上都有不同的按钮和链接,并根据收到的信息启用/禁用这些按钮和链接。每一行都有一个很长的逻辑链来设置按钮,这使得阅读非常困难。有没有一种方法可以设置一类按钮以使其更易于阅读

不确定“按钮类”是什么意思,但可以创建自定义服务器控件作为按钮控件的包装,并提供一些额外的属性或方法来简化GridView逻辑

下面是我们构建的RadioButton包装的一个快速而肮脏的示例,它扩展了标准单选按钮的属性,因此可以保存额外的信息。您可以尝试对GridView按钮执行类似操作:

[DefaultProperty("Text")]
[ToolboxData("<{0}:RadioButton runat=server></{0}:RadioButton>")]
public class RadioButton : System.Web.UI.WebControls.RadioButton
{
    [Bindable(true)]
    [DefaultValue("")]
    [Localizable(true)]
    public string Value
    {
        get
        {
            string RadioValue = (string)ViewState["Value"];
            return (RadioValue == null) ? String.Empty : RadioValue;
        }

        set
        {
            ViewState["Value"] = value;
        }
    }

    protected override void RenderContents(HtmlTextWriter output)
    {
        output.Write(Text);
    }
}
[DefaultProperty(“文本”)]
[ToolboxData(“”)
公共类RadioButton:System.Web.UI.WebControl.RadioButton
{
[可装订(真实)]
[默认值(“”)
[可本地化(正确)]
公共字符串值
{
得到
{
字符串RadioValue=(字符串)视图状态[“值”];
return(RadioValue==null)?字符串。空:RadioValue;
}
设置
{
视图状态[“值”]=值;
}
}
受保护的覆盖无效渲染内容(HtmlTextWriter输出)
{
输出。写入(文本);
}
}

您可以快速完成的一件事是将数据源转换为报表类。然后,您可以将用于启用/禁用的逻辑移动到该类中(即,每个按钮的单个属性),并更新网格,以简单地检查每个链接/按钮的相应属性

这至少可以将aspx文件中的逻辑移到更容易维护/阅读的地方

例如:

grid.DataSource = MyReportClass.GetReport();
在哪里

公共MyReportClass
{
公共字符串名称{get;set;}
公共字符串EnableLink1{get{//logic here}}
公共字符串EnableButton3{get{///logic here}
公共静态列表GetReport()
{ 
//获取数据
}
}
然后aspx变为

<gridview id="grid" runat="server" ... >
   ...
   <asp:templatefield headertext="Link1" ><itemtemplate>
     <asp:linkbutton id="l1" runat="server" ...
       visible='<%# !(bool)DataBinder.Eval(Container.DataItem, "EnableLink1") %>'                          
      />
    </itemTemplate></asp:templatefield>
    ...
</gridview>

...
...
<gridview id="grid" runat="server" ... >
   ...
   <asp:templatefield headertext="Link1" ><itemtemplate>
     <asp:linkbutton id="l1" runat="server" ...
       visible='<%# !(bool)DataBinder.Eval(Container.DataItem, "EnableLink1") %>'                          
      />
    </itemTemplate></asp:templatefield>
    ...
</gridview>