Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用字符串列表将多个变量传递给中继器_C#_Asp.net - Fatal编程技术网

C# 如何使用字符串列表将多个变量传递给中继器

C# 如何使用字符串列表将多个变量传递给中继器,c#,asp.net,C#,Asp.net,我一直在寻找一种方法,将我的repeater与多个变量(如创建日期、文件路径和父文件夹)一起使用,我能够将数据绑定到字符串列表以填充文件路径,我有一种方法可以将文本放入标签中,但它仅对所有标签字段重复列表中的第一项。是否有一种方法可以将每个字段的多个变量传递给中继器 .aspx .aspx.cs public List<string> CD = new List<string>(); public List<string> lLinks = ne

我一直在寻找一种方法,将我的repeater与多个变量(如创建日期、文件路径和父文件夹)一起使用,我能够将数据绑定到字符串列表以填充文件路径,我有一种方法可以将文本放入标签中,但它仅对所有标签字段重复列表中的第一项。是否有一种方法可以将每个字段的多个变量传递给中继器

.aspx


.aspx.cs

 public List<string> CD = new List<string>();
    public List<string> lLinks = new List<string>();
    public List<string> folder = new List<string>();
    public string root = "";
    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            //Welcomes User
            string Uname = Environment.UserName;
            UserName.Font.Size = 17;
            UserName.Text = "Welcome: " + Uname;
            Get_Vars();

            //Define your list contents here 
            repLinks.DataSource = lLinks;
            repLinks.DataBind();
        }

    }

    protected void Get_Vars()
    {
        //gives path and constructs lists for directory paths and file links
        root = "C:\\Users\\James\\Documents\\Visual Studio 2015\\WebSites";

        //adds files to list
        foreach (var path in Directory.GetDirectories(@root))
        {
            foreach (var path2 in Directory.GetFiles(path))
            {
                lLinks.Add(path2);
                CD.Add(File.GetCreationTime(path2).ToString());
                //CD.Add(File.GetCreationTime(path2).Date.ToString("yyyy-mm-dd"));
                string[] temp = Path.GetDirectoryName(path2).Split(new string[] { "\\" }, StringSplitOptions.None);
                folder.Add(temp[temp.Length-1]);
            }


        }
    }


    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

        foreach (RepeaterItem item in repLinks.Items)
        {
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                for(int k=0;k<CD.Count;k++) {
                    var lbl = (Label)item.FindControl("CRD");
                    //int k = 0;
                    lbl.Text = CD[k];    
                }
            }
            if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
            {
                var lbl = (Label)item.FindControl("USR");
                int k = 0;
                lbl.Text = folder[k];
                k++;
            }
        }
    }
public List CD=new List();
public List lLinks=新列表();
公用列表文件夹=新列表();
公共字符串根=”;
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
//欢迎用户
字符串Uname=Environment.UserName;
UserName.Font.Size=17;
UserName.Text=“欢迎:”+Uname;
获取变量();
//在此处定义列表内容
repLinks.DataSource=lLinks;
repLinks.DataBind();
}
}
受保护的void Get_Vars()
{
//提供目录路径和文件链接的路径和结构列表
root=“C:\\Users\\James\\Documents\\visualstudio 2015\\WebSites”;
//将文件添加到列表中
foreach(Directory.GetDirectories(@root))中的var路径
{
foreach(Directory.GetFiles(path)中的var path2)
{
添加(路径2);
Add(File.GetCreationTime(path2.ToString());
//CD.Add(文件.GetCreationTime(path2.Date.ToString(“yyyy-mm-dd”);
string[]temp=Path.GetDirectoryName(path2.Split)(新字符串[]{“\\”},StringSplitOptions.None);
文件夹添加(临时[临时长度-1]);
}
}
}
受保护的void Repeater1\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
foreach(repLinks.Items中的RepeaterItem项)
{
如果(item.ItemType==ListItemType.item | | item.ItemType==ListItemType.AlternatingItem)
{

对于(int k=0;k不要将相关值存储在不相关的变量中。创建一个表示中继器中任何给定元素的对象。如下所示:

public class MyObject
{
    public string CD { get; set; }
    public string Link { get; set; }
    public string Folder { get; set; }
}
使用该对象的列表作为数据源:

public List<MyObject> MyObjects = new List<MyObject>();
绑定到列表:

repLinks.DataSource = MyObjects;
repLinks.DataBind();
在repeater中,您可以绑定到对象的属性:

<%# ((MyObject)Container.DataItem).CD %>


等等


每当您对数据元素进行逻辑分组时,都要对它们进行分组。与保持一堆独立变量的同步相比,维护起来要容易得多。

不要将相关值存储在不相关的变量中。创建一个表示中继器中任何给定元素的对象。如下所示:

public class MyObject
{
    public string CD { get; set; }
    public string Link { get; set; }
    public string Folder { get; set; }
}
使用该对象的列表作为数据源:

public List<MyObject> MyObjects = new List<MyObject>();
绑定到列表:

repLinks.DataSource = MyObjects;
repLinks.DataBind();
在repeater中,您可以绑定到对象的属性:

<%# ((MyObject)Container.DataItem).CD %>


等等


每当您对数据元素进行逻辑分组时,都要对它们进行分组。与保持一堆单独变量的同步相比,维护起来要容易得多。

删除您的
ItemDataBound
事件处理程序。您不需要仅将一些文本绑定到标签上。最好以声明方式进行

您应该将数据封装在模型中

public class CD
{
    public string Name {get; set;}
    public string Link {get; set;
    public string Folder {get; set;}
    //additional properties about the CD here
}
然后创建一个列表,并将其绑定到中继器

List<CD> cds = new List<CD>();
//populate your list with data. Here's manually populating with one
CD cd = new CD
{
    Name = "Dark Side of the Moon",
    Link = "http://www.google.com/pinkfloyd",
    Folder = "C:\\Users\\etc"
};
cds.Add(cd);

repLinks.DataSource = cds;
repLinks.DataBind();
List cds=new List();
//用数据填充列表。下面是手动填充数据
CD=新CD
{
Name=“月球的黑暗面”,
链接=”http://www.google.com/pinkfloyd",
Folder=“C:\\Users\\etc”
};
添加(cd);
repLinks.DataSource=cds;
repLinks.DataBind();
最后,强烈键入中继器,然后可以访问属性

<asp:Repeater id="repLinks" runat="server" ItemType="CD" OnItemDataBound="Repeater1_ItemDataBound">
    <!-- omit some stuff -->
    <%#: Item.Name %>  

删除您的
ItemDataBound
事件处理程序。您不需要仅将一些文本绑定到标签上。最好以声明方式这样做

您应该将数据封装在模型中

public class CD
{
    public string Name {get; set;}
    public string Link {get; set;
    public string Folder {get; set;}
    //additional properties about the CD here
}
然后创建一个列表,并将其绑定到中继器

List<CD> cds = new List<CD>();
//populate your list with data. Here's manually populating with one
CD cd = new CD
{
    Name = "Dark Side of the Moon",
    Link = "http://www.google.com/pinkfloyd",
    Folder = "C:\\Users\\etc"
};
cds.Add(cd);

repLinks.DataSource = cds;
repLinks.DataBind();
List cds=new List();
//用数据填充列表。下面是手动填充数据
CD=新CD
{
Name=“月球的黑暗面”,
链接=”http://www.google.com/pinkfloyd",
Folder=“C:\\Users\\etc”
};
添加(cd);
repLinks.DataSource=cds;
repLinks.DataBind();
最后,强烈键入中继器,然后可以访问属性

<asp:Repeater id="repLinks" runat="server" ItemType="CD" OnItemDataBound="Repeater1_ItemDataBound">
    <!-- omit some stuff -->
    <%#: Item.Name %>  


我认为这是最近添加的,但是你可以在repeater的标记中设置
项目类型,然后项目将是强类型的,不需要强制转换。我在回答中展示了一个这样的例子。@mason:这当然让它更干净了。我已经有一段时间没有使用表单了(幸运的是)。谢谢!我想这是最近添加的,但是您可以在repeater的标记中设置
ItemType
,然后该项将是强类型的,无需强制转换。我在回答中展示了一个例子。@mason:这当然会使它更干净。我已经有一段时间没有使用表单了(幸运的是)。谢谢!