将其他变量传递给button_click()方法

时间:2014-09-23 13:36:06

标签: c# asp.net

我正在创建一个用于列出文件的动态表。

显示filename,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
}

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

4 个答案:

答案 0 :(得分:3)

您可以将command argument传递给链接按钮,如下所述:

btn_delete.CommandArgument =  [ID of the file]

并点击链接按钮的点击事件,您可以按如下所述访问它:

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

参考: LinkButton.CommandArgument Property

答案 1 :(得分:2)

SpiderCode和RePierre关于使用CommandArgument的答案是正确的。但是,它可能会帮助您理解CommandArgument只不过是围绕ViewState概念的薄包装。

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。

答案 2 :(得分:1)

您可以使用btn_delete的{​​{3}}属性将路径传递给文件:

btn_delete.CommandArgument = file.Name;

在事件处理程序中,您只需获取以下值:

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

答案 3 :(得分:-2)

您可以通过创建从主Control继承的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; }
    }
}