簡體   English   中英

動態創建按鈕以調用方法並傳入參數

[英]create buttons dynamically to call method and pass in parameter

我有一個帶有鍵值對的字典,需要遍歷這些對並為每個對創建一個按鈕,並連接按鈕以調用方法DisplayDocument(字符串Id)並傳入Key作為參數。

這是我到目前為止所擁有的。

        // 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/>"然后再次為字典中的下一項做同樣的事情。

下面我在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類以修改布局(邊距等)

希望這可以幫助。

如果你想傳遞更復雜的東西, 這篇文章演示了一種稍微強大的傳遞參數的方法。

添加click事件處理程序:

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM