我有一个下拉列表ddlTables
,它包含我的数据库中的表名,我根据所选的表显示网格中的表内容。
我使用以下代码将数据填充到Page_Load
事件的下拉列表中:
ddlTables.Items.Add("-SELECT-");
String getTables = "SELECT TABLE_NAME FROM Information_Schema.Tables where Table_Type = 'BASE TABLE'";
MySqlConnection objMyCon10 = new MySqlConnection(strProvider);
objMyCon10.Open();
MySqlCommand cmd10 = new MySqlCommand(getTables, objMyCon10);
MySqlDataReader r = cmd10.ExecuteReader();
while (r.Read())
{
ddlTables.Items.Add(r[0].ToString());
}
objMyCon10.Close();
当我点击Go
按钮时,它应该显示所选表格的表格内容。
但是点击Go
按钮,我发现它首先调用Page_Load
事件然后调用btnGo_Click
。
所以它复制了我的下拉列表中的所有值。
最后,单击Go
按钮后,我的下拉列表中的每个表名都会出现两次。
如何删除这些重复的值?
尝试将该代码放入
if(!Page.IsPostBack)
{
//your code
}
块
将您的代码填入以填充下拉列表中的项目
if(!Page.IsPostback)
{[dropdown filling/binding code here]}
条件检查,这将避免在您单击按钮时再次填写值,并保留选择(如果您在下拉列表中做出的任何选择)
示例程序
if(!IsPostBack)
{
//Creating Items
ListItem li1 = new ListItem("Male", "1");
ListItem li2 = new ListItem("Female", "2");
ListItem li3 = new ListItem("Secret", "3");
//Adding Items to DropDownList
DropDownList1.Items.Add(li1);
DropDownList1.Items.Add(li2);
DropDownList1.Items.Add(li3);
}
2个选项:
如果您只需要首先访问该页面时保持一致的项目,请使用:
if(!Page.IsPostback) { /* bind here */ };
如果您需要在页面刷新时生效值,则禁用控件上的视图状态,并且不会在回发时将下一个值重新应用于下拉列表。