C# DropDownList事件后,GridView中的列将重复
我想学习一些关于DataTable和GridView的知识。我在网上找到一段代码:C# DropDownList事件后,GridView中的列将重复,c#,asp.net,gridview,autopostback,C#,Asp.net,Gridview,Autopostback,我想学习一些关于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.Colu
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();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
DataTable=新的DataTable();
grid1=新的GridView();
this.form1.Controls.Add(grid1);
grid1.AutoGenerateColumns=false;
表.列.添加(“剂量”,类型(int));
表.列.添加(“药物”,类型(字符串));
表.列.添加(“患者”,类型(字符串));
表.列.添加(“日期”,类型(日期时间));
//这里我们添加五个数据行。
表.Rows.Add(25,“Indocin”,“David”,DateTime.Now);
添加(50,“Enebrel”,“Sam”,DateTime.Now);
表.Rows.Add(10,“Hydrazine”,“Christoff”,DateTime.Now);
添加(21,“Combivent”,“Janet”,DateTime.Now);
表.行.添加(100,“迪兰丁”,“梅勒妮”,日期时间.现在);
for(int i=0;i
结果:
但如果我从标签旁边的DropDownList中更改所选值,则会产生以下结果:
为什么专栏越来越多?有什么想法吗
编辑:
我并没有写我想把数据库中的数据放到GridView中。我将有一个SQL查询,例如“SELECT*FROM TableName WHERE id=“+DropDownList1.SelectedItem”,因此我认为它必须在每次回发时执行。这是因为您在每次回发时都在执行代码,请评估Page.IsPostBack属性以检查它是初始页面加载还是回发
你最好去微软虚拟学院看看。把你的页面加载事件代码放进去
if(!Page.IsPostBack)
{
// Your logic here
}
每次任何控件引发回发时,它都会触发页面加载事件,从而使应用程序向响应中添加新的gridview。了解回发的工作原理和页面生命周期 您可以先清除网格,然后将数据加载到网格中 不过回发是一个更好的选择。代码是:
if (!IsPostBack)
{
do something
return;
}
正如其他人所说——如果你在第一次加载和每次回发时都这样做,你会得到重复的。form1中的控件存储在视图状态,但每次都会创建新控件。将代码封装在
if (!IsPostBack)
{
your code here
}
哦,我并没有写我想把数据库中的数据放到GridView中。我将有一个SQL查询,例如“SELECT*FROM TableName WHERE”+DropDownList1.SelectedItem,因此我认为它必须在每次回发时执行。在DropDownList的SelectedIndexChanged事件上执行此操作,但这并不意味着您应该一次又一次地创建列。让名为“BuildGridView”的方法在Page_Load上调用一次(IsPostback==true),并让另一个名为“PopulateGridView”的方法在SelectedIndexChanged事件上调用它。