用对象列表填充UserControl Gridview

本文关键字:UserControl Gridview 填充 列表 对象 | 更新日期: 2023-09-27 18:04:35

我有一个名为"Reasons"的对象列表,它包含两个属性"Code" &"文本"。我想用这个来填充Gridview的UserControl。然而,我不明白如何将网格视图链接到原因列表,并实际设置要从对象中使用哪些数据。

我认为该方法是将数据源设置为列表,然而,这是不工作的,因为它似乎填充gridview与任何行。有更好的方法来解决这个问题吗?

用对象列表填充UserControl Gridview

我假设你在winformc#中做这个。在asp.net的c#后台代码中应该是相当相似的。下面是一些示例代码,您可以轻松地定制为您的对象类型:

/// <summary>
/// The test class for our example.
/// </summary>
class TestObject
{
    public string Code { get; set; }
    public string Text { get; set; }
}
void PopulateGrid()
{
    TestObject test1 = new TestObject()
    {
        Code = "code 1",
        Text = "text 1"
    };
    TestObject test2 = new TestObject()
    {
        Code = "code 2",
        Text = "text 2"
    };
    List<TestObject> list = new List<TestObject>();
    list.Add(test1);
    list.Add(test2);
    dataGridView1.DataSource = list;
    dataGridView1.DataBind();
}

您假设将数据源设置为列表是正确的。您还需要记住在将数据源设置为列表后调用GridView.DataBind()命令。

即:

List<Reasons> lReasons = Assign List Here....
gvReasons.DataSource = lReasons;
gvReasons.DataBind();

另外,如果你想设置你的两个属性作为列在你的GridView,分配他们像这样(假设你在这里与WebForms工作,而不是WinForms):

<asp:GridView ID="gvReasons" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Code" />
    <asp:BoundField DataField="Text" />
</Columns>
</asp:GridView>

或者您可以指定AutoGenerateColumns="true",让框架自己生成列

我真的不明白这句话,"我想用这个来填充一个Gridview的UserControl ."?然而,如果你问的问题是如何绑定GridView到一个列表的原因对象,那么这应该工作:

。aspx页

<form id="form1" runat="server">
<div>
        <asp:GridView ID="GridView1" runat="server" 
            AutoGenerateColumns="true">
        </asp:GridView>
</div>
</form>

代码后面

protected void Page_Load(object sender, EventArgs e)
{
    List<Reasons> reasonsList = new List<Reasons>()
    {
        new Reasons() { Code = "Code 1", Text = "Text 1" },
        new Reasons() { Code = "Code 2", Text = "Text 2" },
        new Reasons() { Code = "Code 3", Text = "Text 3" },
    };
    GridView1.DataSource = reasonsList;
    GridView1.DataBind();
}
public class Reasons
{
    public string Text { get; set; }
    public string Code { get; set; }
}

虽然其他答案中建议的绑定到数据源将适用于基本网格,但我不喜欢这种方法,因为它使分页和排序更加困难。如果按照下面的建议将ObjectDataSource绑定到业务层,从长远来看会少一些麻烦:

通过代码隐藏或标记数据源填充gridview ?