gridview有问题

时间:2014-02-09 19:20:07

标签: c# asp.net gridview

我有一个gridview,我有一个DB。在我的任务中,我将GridView绑定到DB,并希望更改每列的宽度。

dataAdapter = new SqlDataAdapter("SELECT *  FROM Turs", sqlcn);
dt = new DataTable("Turs");
dataAdapter.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();


如果我将代码添加到GridView1_RowDataBound中,我会收到一条错误:“指定的参数超出了有效值范围。参数名称:index ”。调试器的跟踪向我显示GridView1只有1列。为什么?在DB中我有8列。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        e.Row.Cells[0].Width = 100;
        e.Row.Cells[1].Width = 150;
    }

此致




编辑:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
        BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" Font-Size="Medium"
        ShowHeaderWhenEmpty="True" AutoGenerateColumns="True" 
        onrowdatabound="GridView1_RowDataBound">
        <EditRowStyle BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" />
        <HeaderStyle Font-Bold="True" Font-Size="Larger" ForeColor="Blue" />
        <RowStyle BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" />
    </asp:GridView>

2 个答案:

答案 0 :(得分:1)

您需要检查 GridView1_RowDataBound 事件中的 RowType

试试这个

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[0].Width = 100;
            e.Row.Cells[1].Width = 150;
        }
}

答案 1 :(得分:0)

尝试将GridView AutoGenerateColumns属性设置为True,如

AutoGenerateColumns="true"

修改

如果检查MSDN是否为DataAdapter.Fill方法;您使用的超载不存在。 见http://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.fill%28v=vs.80%29.aspx

用于填充DataTable的重载是DataAdapter.Fill (DataTable, IDataReader)

您应该这样做,而不是创建DataSet

DataSet ds = new DataSet();
dataAdapter.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();