2014-09-23 83 views
1

我正在创建列表文件的动态表。将其他变量传递给button_click()方法

它显示文件名,filesize,dateModified列。另外,我还添加了一列:删除。

在表中列出文件夹的文件的方法。

public void listFile() 
{ 
    var dir = new DirectoryInfo(selectedFolder); 

    Table fileTable = new Table(); 

    foreach (var file in dir.GetFiles()) 
    { 
     TableRow tr = new TableRow(); 

     TableCell td1 = new TableCell(); 
     TableCell td2 = new TableCell(); 
     TableCell td3 = new TableCell(); 
     TableCell td4 = new TableCell(); 

     Label name = new Label(); 
     Label size = new Label(); 
     Label dateMod = new Label(); 
     LinkButton btn_delete = new LinkButton(); 

     name.Text = file.Name; 
     size.Text = (file.Length/1024) + " KB"; 
     dateMod.Text = file.LastWriteTime.ToLongTimeString(); 

     btn_delete.Text = "Delete"; 
     btn_delete.Click += new EventHandler(btn_delete_Click); 

     td1.Controls.Add(name); 
     td2.Controls.Add(size); 
     td3.Controls.Add(dateMod); 
     td4.Controls.Add(btn_delete); 

     tr.Controls.Add(td1); 
     tr.Controls.Add(td2); 
     tr.Controls.Add(td3); 
     tr.Controls.Add(td4); 
    } 

    filePanel.Controls.Add(fileTable); 
} 

protected void btn_delete_Click(object sender, EventArgs e) 
{ 
    //Delete file 
} 

现在我想删除文件,当我点击相应的删除按钮。但问题是计算机将如何知道要删除哪个文件?我必须将文件名传递给删除方法。

+0

你认为有一个成员变量持有字符串的文件,那么你可以访问按钮 – ZoomVirus 2014-09-23 13:39:29

+0

@karlsweeney怎么样?你可以解释吗? – zkanoca 2014-09-23 13:40:24

+0

wpf或winform或其他? – ZoomVirus 2014-09-23 13:41:00

回答

3

下文提到你可以通过command argument的链接按钮:

protected void btn_delete_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)sender; 
    var id = btn.CommandArgument; 
} 

btn_delete.CommandArgument = [ID of the file] 

和链接按钮,您可以访问它的单击事件下面所提到参考:LinkButton.CommandArgument Property

-2

您可以通过创建一个从主控件继承的UserControl来完成此操作。 在我的示例中,我使用地址变量扩展了文本框。

以这种方式将值绑定到控件,您可以稍后使用它。

public class ExtendedTextBox : System.Windows.Forms.TextBox 
{ 
    private int? _Address = null; 

    [Description("Address of variable")] 
    [DefaultValue(null)] 
    public int? Address 
    { 
     get { return _Address; } 
     set { _Address = value; } 
    } 
} 
+0

这与他们的按钮按下如何适合? – ZoomVirus 2014-09-23 13:44:34

+0

您应该使用标准ButtonClickedEventHandler,因此您可以通过参数“sender”获取发件人。 – Geno 2014-09-23 13:46:32

1

您可以使用btn_deleteCommandArgument属性的路径传递到文件:

btn_delete.CommandArgument = file.Name; 

而在事件处理程序,你只需要获取的价值如下:

protected void btn_delete_click(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    var filename = button.CommandArgument; 
} 
2

从SpiderCode答案和RePierre关于使用CommandArgument是正确的。然而,它可以帮助你理解CommandArgument只不过是ViewState概念的一个简单包装。

ViewState是您如何在客户端和服务器之间传输数据的一种方式。如果您遇到过类似的问题,并且您没有可用的命令参数,则可以使用视图状态。

看看在LinkBut​​ton.cs

public string CommandArgument { 
      get { 
       string s = (string)ViewState["CommandArgument"]; 
       return((s == null) ? String.Empty : s); 
      } 
      set { 
       ViewState["CommandArgument"] = value; 
      } 

所以,你既可以使用CommandArgument或直接使用ViewState的。