使用对象列表填充UserControl Gridview

时间:2011-08-04 14:56:43

标签: c# asp.net list gridview user-controls

我有一个名为“Reasons”的对象列表,其中包含两个属性“Code”& “文本”。我想用它来填充Gridview的UserControl。但是,我不明白如何将gridview链接到原因列表,并实际设置从对象中使用哪些数据。

我认为这种方法是将数据源设置为List,但是,这样做不起作用,因为它似乎用任何行填充gridview。有没有更好的方法解决这个问题?

4 个答案:

答案 0 :(得分:5)

我假设你在winform C#中这样做。它应该与asp.net的C#codebehind非常相似。 这里有一些示例代码,您可以轻松自定义为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;
}

答案 1 :(得分:4)

您认为将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”并让框架自己生成列。

答案 2 :(得分:2)

我真的不明白这句话,“我想用它来填充Gridview的UserControl。”?但是,如果您要问的问题是如何将GridView绑定到您的Reasons对象列表,那么这应该有效:

.aspx Page

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

答案 3 :(得分:1)

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

populate gridview via code-behind or markup DataSource?