[英]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.