在usercontrol中设置类的值

本文关键字:设置 usercontrol | 更新日期: 2023-09-27 18:08:20

我试图设置一个类的值在用户控件从另一个页面的代码后面,不能让它工作。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class itemtest : System.Web.UI.UserControl
{
public DataRowView DataRowItem { get; set; }
public class Headers 
{
    public string strItems { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
    Headers hdrs = new Headers();
    string strItems = hdrs.strItems;
    if (strItems != null)
    {
        List<string> lstHeaders = strItems.Split(',').ToList<string>();
        DataTable dtHeaders = new DataTable();
        dtHeaders.Columns.Add("Header", typeof(String));
        dtHeaders.Columns.Add("Value", typeof(String));
        foreach (var item in lstHeaders)
        {
            DataRow drHeaders = dtHeaders.NewRow();
            drHeaders["Header"] = item.ToString();
            drHeaders["Value"] = DataRowItem[item.ToString()].ToString();
            dtHeaders.Rows.Add(drHeaders);
        }
        rptHeaders.DataSource = dtHeaders;
        rptHeaders.DataBind();
    }
}
}

和在我的其他页面。cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ListViewTest : System.Web.UI.Page
{
public string strTableHeaders;
public DataRowView DataRowItem { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
    strTableHeaders = "UserID,MachineName";
}
protected void lvExample_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        itemtest itemHeaders = (itemtest)e.Item.FindControl("itemsMain");
        if (itemHeaders != null)
            itemHeaders.Headers.strItems = strTableHeaders;

    }
}
}

我得到了错误编译器错误消息:CS0572: 'Headers':不能通过表达式引用类型;"itemtest试试。头"而不是对线itemHeaders.Headers.strItems = strTableHeaders;

有人能帮我吗?我还是个新手,所以最好还是用比较蹩脚的术语

感谢

编辑:我以前的方法是

public DataRowView DataRowItem { get; set; }
public string strItems { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
    if (strItems != null)
    {
        List<string> lstHeaders = strItems.Split(',').ToList<string>();...

但似乎正在发生的是我的usercontrol页面加载事件触发listview_itemdatabound事件之前,我不知道这是怎么可能的,因为usercontrol只在listview中使用…

strItems总是null,页面加载失败

在usercontrol中设置类的值

这一行:

public class Headers 
{
    public string strItems { get; set; }
}

只是声明了新类型。它们不实例化它。但是这一行:

itemHeaders.Headers.strItems = strTableHeaders;

尝试做以下事情:在itemHeaders中获取成员Headers(实际上只是声明了一些可以实例化的新类型[created])并将其成员strItem设置为strTableHeaders

解决方法很简单。将这行添加到类itemtest

public Headers Hdrs { get; set; }

Headers类实例化为名为Hdrs的成员属性。

PS:也请重新考虑概念。正如Hexie所说,这不是正确的方法。我刚刚用注释解决了你的问题。

下面这行是错误的:

itemHeaders.Headers.strItems = strTableHeaders;

它试图做的是重新分配Headers.strItems的含义。这显然不是你想要做的。您需要的是对Headers类对象的实际实例的公共引用,而不是类本身的定义。在你的UserControl中你需要

private Headers _hdrs;
public Headers Hdrs 
{
    get
    {
        return _hdrs ?? (_hdrs = new Headers());
    }
}
public DataRowView DataRowItem { get; set; }

然后在你的页面中使用:

itemHeaders.Hdrs.strItems = strTableHeaders;