将附加变量传递给button_click()方法

本文关键字:click 方法 button 变量 | 更新日期: 2023-09-27 18:24:15

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

它显示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方法。

将附加变量传递给button_click()方法

您可以将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属性

SpiderCode和RePierre关于使用CommandArgument的回答是正确的。然而,它可能有助于您理解CommandArgument只不过是ViewState概念的一个薄薄的包装器。

ViewState是在客户端和服务器之间传输数据的一种方式。如果遇到类似的问题,并且没有可用的commandargument,则可以求助于viewstate。

看看LinkButton.cs

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

因此,您既可以使用CommandArgument,也可以直接使用ViewState。

您可以使用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;
}

您可以通过创建从主控件继承的UserControl来实现这一点。在我的例子中,我用一个地址变量扩展了一个Textbox。

通过这种方式,您可以将值绑定到控件,以后可以使用该控件。

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; }
    }
}