动态创建按钮以调用方法并传入参数

时间:2011-10-20 18:59:19

标签: c# asp.net

我有一个带有键值对的字典,需要遍历这些对并为每个字符串创建一个按钮并连接按钮以调用方法DisplayDocument(字符串Id)并传入Key作为参数。< / p>

这是我到目前为止所拥有的。

        // test data
        var documents= new Dictionary<string,string>();
        documents.Add("69110","Diploma");
        documents.Add("76404", "Licensure");


        foreach (KeyValuePair<string, string> item in documents)
        {

            MyStringBuilder=MyStringBuilder.Append(item.Value + "   " + item.Key + "<br />"); 

        }
        printFaxDocuments.InnerHtml = MyStringBuilder.ToString();

我想要做的是打印文档键和值,然后打印一个按钮,用户可以单击该按钮查看文档。我有为查看文档而构建的方法,它需要传入Key值。我该怎么做?

我不确定如何在文本数据中穿插按钮。我需要写出键和值添加按钮添加"<br/>",然后再次为字典中的下一项做同样的事情。

2 个答案:

答案 0 :(得分:3)

下面我在OnInit方法中创建了Button控件,并为每个控件分配了相同的Click事件处理程序。

Key存储在Buttons CommandArgument属性中,该属性在事件处理程序中检索并传递给DisplayDocument方法。

protected override void OnInit(EventArgs e)
{
    // test data
    var documents = new Dictionary<string, string>();
    documents.Add("69110", "Diploma");
    documents.Add("76404", "Licensure");

    foreach (KeyValuePair<string, string> item in documents)
    {
        Button button = new Button();
        button.Text = string.Format("Button: {0}", item.Key);
        button.CommandArgument = item.Key;
        button.Click += ButtonClicked;

        ButtonContainer.Controls.Add(button);
    }

    base.OnInit(e);
}

protected void ButtonClicked(object sender, EventArgs e)
{
    Button button = (Button) sender;
    string id = button.CommandArgument;

    DisplayDocument(id);
}

private void DisplayDocument(string id)
{
    //Do something
}

修改

最好使用CSS来设置按钮的布局。

尝试将以下CSS类添加到页面的头部(或样式表文件)

<style type="text/css">
    .stacked-button
    {
        display:block;
    }
</style>

然后将以下内容添加到按钮创建代码中:

button.CssClass = "stacked-button";

然后,您可以根据需要添加到CSS类来修改布局(边距等)

希望这有帮助。

答案 1 :(得分:0)

This post展示了一种更强大的参数传递方式,如果您想传递更复杂的信息。

添加点击事件处理程序:

button1.Click += delegate(object sender, EventArgs e) { 
    button_Click(sender, e, "String or other types eg, enum..", SomeCustomEnum.SomeSelection); 
};

然后将参数添加到点击处理程序方法中:

void button_Click(object sender, EventArgs e, string messageButCanBeIntEtc, SomeCustomEnum type)  
{  
    // do things
}