我想了解一下DataTable和GridView。我在互联网上找到了一段代码:
protected void Page_Load(object sender, EventArgs e)
{
DataTable table = new DataTable();
grid1 = new GridView();
this.form1.Controls.Add(grid1);
grid1.AutoGenerateColumns = false;
table.Columns.Add("Dosage", typeof(int));
table.Columns.Add("Drug", typeof(string));
table.Columns.Add("Patient", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
// Here we add five DataRows.
table.Rows.Add(25, "Indocin", "David", DateTime.Now);
table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
for (int i = 0; i < table.Columns.Count; i++)
{
BoundField boundfield = new BoundField();
boundfield.DataField = table.Columns[i].ColumnName.ToString();
boundfield.HeaderText = table.Columns[i].ColumnName.ToString();
grid1.Columns.Add(boundfield);
}
grid1.DataSource = table;
grid1.DataBind();
}
结果:enter image description here
但如果我从Label旁边的DropDownList更改选定值,那就是结果:enter image description here
为什么会有越来越多的专栏?有什么想法吗?
编辑: 我没有&#39;写道,我想把数据库中的数据放入GridView。我将有一个SQL查询,例如&#34; SELECT * FROM TableName WHERE id =&#34; + DropDownList1.SelectedItem,所以我认为它必须在每个Postback上执行。
答案 0 :(得分:0)
这是因为您正在每次回发时执行代码,评估Page.IsPostBack属性以检查它是初始页面加载还是回发。
你最好去微软虚拟学院一段时间。
答案 1 :(得分:0)
将您的页面加载事件代码放在
中if(!Page.IsPostBack)
{
// Your logic here
}
每次任何控件都使用回发时,它会触发页面加载事件,导致应用程序将新的gridview添加到响应中。了解回发的工作原理和页面生命周期。
答案 2 :(得分:0)
您可以先清除网格,然后将数据加载到网格中。
但是,回发是一个更好的选择。代码是:if (!IsPostBack)
{
do something
return;
}
答案 3 :(得分:0)
其他人说的话 - 如果你在第一次加载时这样做,每一次回发你都会得到重复。 form1中的控件存储在视图状态中,但每次都会继续创建新控件。将代码封装在
中if (!IsPostBack)
{
your code here
}