我正在创建一个用于列出文件的动态表。
显示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方法。
答案 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;
}
答案 1 :(得分:2)
SpiderCode和RePierre关于使用CommandArgument的答案是正确的。但是,它可能会帮助您理解CommandArgument只不过是围绕ViewState概念的薄包装。
ViewState是如何在客户端和服务器之间传输数据的一种方式。如果您遇到类似问题并且没有可用的命令参数,则可以使用viewstate。
看一下LinkButton.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; }
}
}