使用c#填充Gridview

时间:2016-06-17 19:01:14

标签: c# asp.net gridview

是否可以使用c#函数填充Gridview表?对于Gridview,我通常会在检索数据后看到DataSourceSqlDataSource以及查询。

我已经拥有List个对象,每个对象都有应该填充表格的字段。每个对象有9个字符串字段,每个字段应绑定到一列。列表中的每个对象实际上代表表中的一行。 c#文件中的代码会是这样的吗?

for (int i = 0; i < credentials.Count; i++)
{
    for (int j = 0; j < 10; j++)
    {
        row1["ID"] = credentials[i].Id.ToString();
        row1["Windows ID"] = credentials[i].WindowsId;
        row1["First Name"] = credentials[i].FirstName.ToString();
        row1["Last Name"] = credentials[i].LastName.ToString();
        ...

        dt.Rows.Add(row1);
    }


}
gridRoles.DataSource = dt;
gridRoles.DataBind();

5 个答案:

答案 0 :(得分:0)

如果您已经有一个对象列表,您可以将其设置为GridView的数据源,无需转换或创建新的数据表。

gridRoles.DataSource = credentials;

答案 1 :(得分:0)

编辑:其他人一直在说你的数据应该是gridview上的一个来源。我相信这会有效并且更快。我的解决方案可以用迭代创建新数据(比如说你希望ID匹配gridview上的点。)然而,为列表项创建一个新模型并为了创建一些getter可能很方便。模块化OOP。

在这种情况下,我会为您的gridview项创建一个新模型(在这种情况下看起来像用户)。所以我在UWP中做了类似的事情,结果看起来像这样:

        ButtonRow = new List<ButtonModel>();
        int daysOnButtonRow = 365;
        TimeSpan additionalDay = new System.TimeSpan(1);
        for (int i = 0; i < daysOnButtonRow; i++)
        {
            ButtonRow.Add(new ButtonModel(DaysFromToday(i),   DaysFromToday(i + 1)));
        }

然后ButtonModel类包含特定于每个按钮的参数和getters,以获取我想在该按钮上显示的相关信息。

public class ButtonModel
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

    public ButtonModel(DateTime _startDate, DateTime _endDate)
    {
        StartDate = _startDate;
        EndDate = _endDate;
    }

    public string StartDateTruncatedName
    {
        get { return StartDate.ToString("dddd").Substring(0, 3).ToUpper(); }
    }

    public string StartDateDayNum
    {
        get { return StartDate.Day.ToString(); }
    }

    public string StartDateMonth
    {
        get { return StartDate.ToString("MMMM").ToUpper(); }
    }
}

这可以更清洁,更模块化。列表视图上的示例,但它应该与gridview类似。由于您已经在使用填充列表,我建议您使用&#39; for-in&#39;循环以及迭代而不是标准&#39; for&#39;环。这样就可以在每次向列表中添加项目时将其添加到gridview中。

希望这有帮助! :)

答案 2 :(得分:0)

是的,你正在做什么看起来应该有用,虽然我不确定你使用j是什么,因为它没有在上面的代码中使用。我以编程方式在过去填充DataGridView的方式是创建DataTable对象:

DataTable dt = new DataTable();

定义其列:

dt.Columns.Add(columnName);`

创建DataRow s:

DataRow row = dt.NewRow();
//fill row
row[columnName or index] = value; //repeat for needed values, could use a for loop and go through indexes

DataRow添加到DataTable

dt.Rows.Add(row);
dt.Rows.InsertAt(row, index); //if you want a specific position

最后,将DataGridView的{​​{1}}设置为DataSource,就像你一样:

DataTable

注意:如果您没有dgv.DataSource = dt; 的定义与DataGridView相同的列,那么事情将无法正常工作。

答案 3 :(得分:0)

为什么你不能使用ObjectDataSource?在ObjectDatasource的属性中指定类和方法,您就完成了所有设置。将ObjectDatasource绑定到网格视图。

答案 4 :(得分:0)

    SqlCommand cmd = new SqlCommand();
    SqlConnection con = new SqlConnection();


       try
        {
            using (SqlConnection con = new SqlConnection("Data Source = [SERVERNAME]; Initial Catalog = CustomerOrders; Integrated Security = true"))
            {
                String name = dropDownList.SelectedItem.Text;
                SqlDataAdapter cmd = new SqlDataAdapter("SELECT * FROM Customer INNER JOIN Orders ON Customer.CustomerID = Orders.ReferenceID WHERE Name = '" + name + "'", con);
                con.Open();
                DataTable dtbl = new DataTable();
                cmd.Fill(dtbl);
                gvPhoneBook.DataSource = dtbl;
                gvPhoneBook.DataBind();

            }
        }
        catch (Exception Ex)
        {
            Console.WriteLine(Ex.Message);
        }