我正在尝试从其他页面代码设置用户控件中的类的值,并且无法使其工作。
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();
}
}
}
和我的其他page.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:'标题':无法通过表达式引用类型;试试'itemtest.Headers'吧 换行 itemHeaders.Headers.strItems = strTableHeaders;
谁有人帮帮我?我对此很新,所以lamen条款最好由于
编辑: 我的旧方法只是
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并且我的页面加载失败
答案 0 :(得分:0)
这一行:
public class Headers
{
public string strItems { get; set; }
}
只声明新类型。他们没有实例化它。但是这一行:
itemHeaders.Headers.strItems = strTableHeaders;
尝试执行以下操作:在itemHeaders
获取成员Headers
(实际上只是声明了一些可以实例化[创建]的新类型)并将其成员strItem
设置为strTableHeaders
。
解决方案很简单。将此行添加到您的班级itemtest
public Headers Hdrs { get; set; }
将Headers
类实例化为名为Hdrs
的成员属性。
答案 1 :(得分:0)
以下这行不正确:
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;
这实际上会在实例中分配值。