用对象列表填充用户控件的网格视图

5
我有一个名为“Reasons”的对象列表,它包含两个属性“Code”和“Text”。我想使用它来填充GridView的UserControl。但是,我不知道如何将GridView连接到Reasons列表,并实际设置要使用的对象中的哪些数据。 我认为应该将数据源设置为Reasons列表,但是这并没有起作用,因为它似乎没有为GridView填充任何行。是否有更好的解决方案?
4个回答

9

我假设你正在使用winform C#进行操作。在C# codebehind for asp.net中,应该非常相似。 这里是一些示例代码,您可以轻松地将其自定义为您的obj类型:

/// <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();
}

5
我认为你需要添加:dataGridView1.DataBind(); 以展示数值。 - Baxter

5

你的想法是正确的,你需要将DataSource设置为List。同时,在设置完DataSource后,还需记得调用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”,让框架自动生成列。

1
我认为应该使用<asp:BoundField而不是<asp:BoundColumn。 - Baxter

2

我不是很理解这句话的意思:“我想使用它来填充GridView中的UserControl。”?但是,如果你问的问题是如何将GridView绑定到你的Reasons对象列表,那么以下代码应该能够实现:

.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; }
}

1
虽然像其他答案中建议的那样绑定数据源对于基本网格来说是可行的,但我不喜欢这种方式,因为它会使分页和排序更加困难。如果你将一个ObjectDataSource绑定到业务层,就像在这里建议的那样,从长远来看,你将会有更少的头疼:

通过代码后台或标记数据源填充GridView?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接