将附加变量传递给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方法。
您可以将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属性
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_delete
的CommandArgument
属性来传递文件的路径:
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; }
}
}