我正在将此列表转换为数据表
public static DataTable ConvertToDatatable<T>(IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
我该怎么做才能将这些多个值绑定到转发器或gridview
答案 0 :(得分:4)
您可以在父网格视图或转发器中使用转发器或网格视图。
例如: -
Dictionary<int, object> g = new Dictionary<int, object>() { { 1, new { j = "g" } }, { 2, new { j = "ggfdf" } }, { 3, new { j = "gioret" } } };
gridviewparent.DataSource= g.Select(h => new {key= h.Key});
gridviewparent.DataBind();
foreach (GridViewRow item in gridviewparent.Rows)
{
int key= Convert.Toint32( ((Label)item.FindControl("lblkey")).Text) ;
GridView gridviewChild=(GridView)item.FindControl("gridviewchild");
// return g[key] in list
gridviewChild.DataSource= g[key];
gridviewChild.DataBind();
}
答案 1 :(得分:3)
您可以在转发器内使用转发器。以下是:
将您的列表转换为Dictionary<string, List<object>>
并将其存储到一个属性(在我的示例中,它名为Dict
),可以通过.aspx文件访问(至少protected
或更容易获得)
然后在某个时刻致电outerRepeater.DataBind()
(例如,在Page_Load(object sender, EventArgs e)
实施中)。
将其放入.aspx
文件中以使其正常工作:
<asp:Repeater runat="server" ID="outerRepeater" DataSource='<%# Dict.Keys%>'>
<ItemTemplate>
<asp:Repeater runat="server" ID="innerRepeater" DataSource='<%# Dict[DataBinder.Eval(Container, "DataItem").ToString()]%>'>
<ItemTemplate>
<%# DataBinder.Eval(Container, "DataItem")%>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
当您在字典中的List中存储具体对象时,可以使用<%# DataBinder.Eval(Container, "DataItem.EventDate")%>
来访问属性(在此示例中使用名称EventDate
)。
例如:Dictionary<string, List<Event>>
答案 2 :(得分:2)
我认为你必须要做的唯一事情是将动态数据表绑定到gridView,使用asp Gridview控件的内置属性 AutoGenerateColumns =& #34; true&#34 ;; 除非你确切知道要绑定的列,否则你必须使用GridView.RowDataBound Event
。
What is exactly this AutoGenerateColumns property ?
~ASP代码
<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns = "true" ></asp:GridView>
假设myDatatable
是从ConvertToDatatable
方法返回的数据表对象。
~C#代码:
MyGridview.DataSource = myDatatable;
MyGridview.DataBind();
希望它有所帮助!