2010-02-22 39 views
0

我有一個繼承自LinkBut​​ton ASP.NET控件的類,以便在動態創建LinkBut​​ton時包含一個int「Value」屬性以記住數據庫ID。這樣我就可以在回發的基礎上加載一些基於該ID的數據庫驅動的內容。簡單的ASP.NET/C#問題 - 事件

我的問題是:有一種簡單的方法可以在C#中實現這一點嗎?我瀏覽了一下互聯網,並獲得了關於代理&自定義事件處理的大量信息,但它對於我需要做的事情似乎過於複雜。我是否應該閱讀代表,泛型&事件,還是我可以重寫LinkBut​​tons Click事件來捕獲ID並查詢數據庫?

編輯

我創建我的動態控制,所以我不知道如何將事件連接起來,的動態click事件添加的控制。我對CommandArgument屬性的下面幾點做了介紹,但是沒有人有使用CommandArgument和動態創建控件的例子嗎?

var lnkbtnTitle = new LinkButton(); 

      lnkbtnTitle.CssClass = "ABC"; 
      lnkbtnTitle.ToolTip = Description; 
      lnkbtnTitle.Text = Name + ' ' + Version; 
      lnkbtnTitle.CommandArgument = ID.ToString(); 
      pnlHelpGuidesView.Controls.Add(lnkbtnTitle); 

回答

0

好的,我在這裏解決了我自己的問題,結果是我之前遇到過的一個菜鳥問題!我想這是值得任何潛在的尷尬,在這裏發表分辨率爲別人的利益......

當您創建動態控件必須重新創建他們回傳

這似乎總是反直覺我,但我的控件創建代碼中有一個if(!IsPostBack)指令,這意味着我嘗試這些事件的任何解決方案都不會觸發。這是因爲控件不再存在,因爲我沒有在回發中重新創建它。

在回答我自己的問題,並採取板載這裏提到的點,下面的代碼工作...

private void DrawHelpGuide(int ID, int Type, string Name, string Description, string Version, string URL) 
    { 
      var lnkbtnTitle = new LinkButton(); 

      lnkbtnTitle.CssClass = "HelpGuideTitle"; 
      lnkbtnTitle.ToolTip = Description; 
      lnkbtnTitle.Text = Name + ' ' + Version; 
      lnkbtnTitle.CommandArgument = ID.ToString(); 
      lnkbtnTitle.Click += new EventHandler(lnkbtnTitle_Click); 
      pnlHelpGuidesView.Controls.Add(lnkbtnTitle); 
     } 

    void lnkbtnTitle_Click(object sender, EventArgs e) 
    { 
     var ClickedButton = (LinkButton)sender; 
     var id = int.Parse(ClickedButton.CommandArgument); 
    } 

我現在也意識到各種版本我以前寫的,而更復雜,也會有效果!在我的具體情況CommandArgument方法是完全足夠的,但我很高興我現在「獲得」代表&事件的概念比我以前做的更多:)

4

我不認爲你需要從LinkBut​​ton的繼承,只是附加一個「ID」屬性,LinkBut​​ton的有一個名爲「CommandArgument」你可以利用存儲該ID屬性,並送它回發。

1

LinkBut​​ton控件已爲此設置了CommandArgument屬性。您只需處理Click或Command事件,將CommandArgument強制轉換爲int,然後捕獲該ID。