C# 使用AppendDataBoundItems时,我的2个GridView中的1个视图中存在重复数据
我有两个gridview,分别称为DDLTOC和DDLCase。我使用appenddatabounditems将默认值插入DDL。我的默认值是(“选择成员报告ID”) 我还在DDLTOC上添加了另一个绑定C# 使用AppendDataBoundItems时,我的2个GridView中的1个视图中存在重复数据,c#,html,asp.net,C#,Html,Asp.net,我有两个gridview,分别称为DDLTOC和DDLCase。我使用appenddatabounditems将默认值插入DDL。我的默认值是(“选择成员报告ID”) 我还在DDLTOC上添加了另一个绑定 protected void DDLTOC_SelectedIndexChanged(object sender, EventArgs e) { using (var connAdd = new SqlConnection("Data Source = localhos
protected void DDLTOC_SelectedIndexChanged(object sender, EventArgs e)
{
using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI"))
{
connAdd.Open();
var sql = "SELECT memberreportid FROM MemberReport Where typeofcrime ='" + DDLTOC.SelectedValue + "' AND caseprogress='settled'";
using (var cmdAdd = new SqlDataAdapter(sql, connAdd))
{
DataSet ds2 = new DataSet();
cmdAdd.Fill(ds2);
DDLCase.DataSource = ds2;
DDLCase.DataTextField = "memberreportid";
DDLCase.DataValueField = "memberreportid";
DDLCase.DataBind();
}
sql = "Select username, memberreportid, location, crdatetime, citizenreport, image1, image2, image3, image4, image5 from MemberReport where typeofcrime ='" + DDLTOC.SelectedItem.Text + "' and handle='handled'";
using (var cmdAdd = new SqlDataAdapter(sql, connAdd))
{
DataSet dsSel = new DataSet();
cmdAdd.Fill(dsSel);
GVCR.DataSource = dsSel;
GVCR.DataBind();
}
connAdd.Close();
}
}
DDLTOC_SelectedIndex中的第一个绑定基本上允许根据DDLTOC中选择的值在dropdownlist上显示DDLCase的值。第二个绑定将在gridview中显示数据库中的必要值。我有2个数据库值,将显示在DDLTOC、帮派和抢劫中。因此,如果我随机选择组,然后选择返回默认值,然后选择组,再返回选择默认值,它将在我的DDLCase上显示两次组的DDLCase值
为什么会出现重复数据 在数据绑定之前,只需清除其项集合。将数据绑定代码部分修改为:
DDLCase.Items.Clear();
DDLCase.DataSource = ds2;
DDLCase.DataTextField = "memberreportid";
DDLCase.DataValueField = "memberreportid";
DDLCase.DataBind();
DDLCase.Items.Insert(0, new ListItem("Select Case", ""));
DDLCase.SelectedIndex = 0;
或者,您可以在
DDLCase
标记中设置EnableViewState=“False”
但是在这种情况下,如果页面上发生任何其他回发(而不是ddlcose
,比如从一个不再填充DDLCase
的按钮),则DDLCase
的数据将丢失。它是DDLCase
的ViewState
,它保持了它以前的状态,以便在交叉请求中下拉项不会丢失。除非其ViewState被禁用,否则您只是将其添加到其项目集合中。如果我要插入项目。清除();在数据绑定之前,当我选择DDLTOC值时,DDLCase中的默认值将消失。如果我没记错的话,ASP.Net有一个错误,第一个选项无法选择。我尝试启用视图状态,当我在DDLTOC中选择一个选项时,它将仅显示我的默认值DDLCase
的默认值是什么?您可以清除项目集合,然后进行数据绑定,然后使用items.InsertAt(0)
插入该值;然后可以使用SelectedIndex=0
作为要选择的默认值。你能发布DDLCase
的标记吗?
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
SqlConnection conn = new SqlConnection("Data Source=localhost;" +
"Initial Catalog=project; Integrated Security = SSPI");
SqlDataAdapter da = new SqlDataAdapter("SELECT distinct typeofcrime FROM MemberReport where handle='handled' AND caseprogress='settled'", conn);
conn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
DDLTOC.DataSource = ds;
DDLTOC.DataTextField = "typeofcrime";
DDLTOC.DataValueField = "typeofcrime";
DDLTOC.DataBind();
conn.Close();
}
}
protected void DDLTOC_SelectedIndexChanged(object sender, EventArgs e)
{
using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI"))
{
connAdd.Open();
var sql = "SELECT memberreportid FROM MemberReport Where typeofcrime ='" + DDLTOC.SelectedValue + "' AND caseprogress='settled'";
using (var cmdAdd = new SqlDataAdapter(sql, connAdd))
{
DataSet ds2 = new DataSet();
cmdAdd.Fill(ds2);
DDLCase.DataSource = ds2;
DDLCase.DataTextField = "memberreportid";
DDLCase.DataValueField = "memberreportid";
DDLCase.DataBind();
}
sql = "Select username, memberreportid, location, crdatetime, citizenreport, image1, image2, image3, image4, image5 from MemberReport where typeofcrime ='" + DDLTOC.SelectedItem.Text + "' and handle='handled'";
using (var cmdAdd = new SqlDataAdapter(sql, connAdd))
{
DataSet dsSel = new DataSet();
cmdAdd.Fill(dsSel);
GVCR.DataSource = dsSel;
GVCR.DataBind();
}
connAdd.Close();
}
}
DDLCase.Items.Clear();
DDLCase.DataSource = ds2;
DDLCase.DataTextField = "memberreportid";
DDLCase.DataValueField = "memberreportid";
DDLCase.DataBind();
DDLCase.Items.Insert(0, new ListItem("Select Case", ""));
DDLCase.SelectedIndex = 0;