在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,页面加载失败
这一行:
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;