我有一个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>
答案 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();