[英]Why GridView column names are repeating when user refresh the page?
我有一個GridView,我得到了期望的輸出。 但是,當我單擊刷新按鈕而不進行任何更改時,它將重復相同的列名。 如何防止重復列?
這是我的輸出是正確的。 我會得到的輸出,當我點擊刷新按鈕, 輸出一個我期待什么
當我再次單擊刷新按鈕時,它將在同一gridview中重復相同的列名稱。 輸出兩個錯誤 。
我想知道為什么它會重復以及如何防止它。
這是我的代碼
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound"></asp:GridView>
C#代碼:
string selectedColumn;
string[] splitSelectedColumn;
string groupByColumn;
string[] splitGroupByColumn;
protected void btnRefresh_Click(object sender, EventArgs e)
{
selectedColumn = txtColumnNames.Text;
splitSelectedColumn = selectedColumn.Split(',');
groupByColumn = txtGroupBy.Text;
splitGroupByColumn = groupByColumn.Split(',');
Response.Write("group length="+splitGroupByColumn.Length);
string[] compareGroup = new string[splitGroupByColumn.Length];
Response.Write("inside array=" + compareGroup[0]);
//Grouping column names using selected column text
int flag = 1;
foreach (string columnName in splitSelectedColumn)
{
flag = 1;
foreach (string groupByName in splitGroupByColumn)
{
if (columnName.Equals(groupByName))
{
flag = 2;
break;
}
}
if (flag == 1)
{
groupByColumn = groupByColumn + "," + columnName;
}
}
// CREATE A TEMPLATE FIELD AND BOUND FIELD
BoundField bfield = new BoundField();
TemplateField[] ttfield = new TemplateField[10];
for (int i = 0; i < splitSelectedColumn.Length; i++)
{
if (i < splitGroupByColumn.Length)
{
ttfield[i] = new TemplateField();
ttfield[i].HeaderText = splitGroupByColumn[i];
GridView1.Columns.Add(ttfield[i]);
}
else
{
try
{
bfield.HeaderText = splitSelectedColumn[i];
bfield.DataField = splitSelectedColumn[i];
Response.Write("<br/>BOUND FIELD==" + splitGroupByColumn[i]);
GridView1.Columns.Add(bfield);
}
catch (Exception)
{
}
}
}
// CREATE DATA TABLE and COLUMN NAMES
DataTable dt = new DataTable();
for(int i=0;i<splitSelectedColumn.Length;i++)
{
dt.Columns.Add(splitSelectedColumn[i]);
//Console.WriteLine(splitSelectedColumn[i]);
System.Diagnostics.Debug.WriteLine(splitSelectedColumn[i]);
Response.Write("<br/>DT COLUMN NAMES==" + splitSelectedColumn[i]);
}
//ADD ROWS FROM DATABASE
string cs = ConfigurationManager.ConnectionStrings["connectionStringDB"].ConnectionString;
int compareFlag = 0;
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
//cmd.CommandText = "select " + selectedColumn + " FROM [RMSDemo].[dbo].[ItemRelation] where ItemLookupCode='" + txtItemLookupCode.Text + "'and ChildItemLookupCode1='" + txtChildItemLookupCode.Text + "' group by " + groupByColumn + " ";
cmd.CommandText = "select " + selectedColumn + " FROM [RMSDemo].[dbo].[ItemRelation] group by " + groupByColumn + " ";
con.Open();
SqlDataReader rd = cmd.ExecuteReader();
string addData=string.Empty;
while (rd.Read())
{
if (compareFlag == 0)
{
for (int i = 0; i < splitGroupByColumn.Length; i++)
{
compareGroup[i] = rd[splitGroupByColumn[i]].ToString();
Response.Write("<br/>COMPARE GROUP [i]==" + compareGroup[i]);
}
compareFlag = 1;
//string[] stack = Enumerable.Range(0, splitSelectedColumn.Length)
// .Select(i => string.Empty)
// .ToArray();
string[] stackss = new string[splitSelectedColumn.Length];
Response.Write("<br/>splitSelectedColumn.LENGTH==" + splitSelectedColumn.Length);
Response.Write("<br/>STACK.LENGTH=="+stackss.Length);
for (int i = 0; i < stackss.Length; i++)
{
stackss[i] = "";
}
for (int i = 0; i < compareGroup.Length;i++ )
{
stackss[i] = compareGroup[i];
}
//tESTING PURPOSE ONLY
for (int i = 0; i < stackss.Length; i++)
{
//stack[i] = "";
Response.Write("<br/>STACK.VALUES==" + stackss[i]);
}
var row = dt.NewRow();
DataRowCollection drc = dt.Rows;
DataRow rowss = drc.Add(stackss);
//dt.Rows.Add(rowss);
}
GridView1.DataSource = dt;
GridView1.DataBind();
}
rd.Close();
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int size = splitGroupByColumn.Length;
Button[] lnkBtn = new Button[size];
for (int i = 0; i < splitGroupByColumn.Length; i++)
{
lnkBtn[i] = new Button();
lnkBtn[i].ID = "lnkView";
lnkBtn[i].Text = (e.Row.DataItem as DataRowView).Row[splitGroupByColumn[i]].ToString();
//Response.Write("<br/>PRINT==" + lnkBtn[i].Text);
//lnkView.Text = (e.Row.DataItem as DataRowView).Row["Id"].ToString();
//lnkView.Click += ViewDetails;
lnkBtn[i].CommandArgument = (e.Row.DataItem as DataRowView).Row[splitGroupByColumn[i]].ToString();
e.Row.Cells[i].Controls.Add(lnkBtn[i]);
}
}
我的頁面沒有添加任何cookie。 但是當我嘗試從瀏覽器中刪除Cookie后,我得到了它的輸出而無需重復列
考慮實現對dt.Columns.Clear();
的調用dt.Columns.Clear();
。 以我的經驗,在更新UI時,通常最好將其清除並重繪。
發生這種情況是由於回發。 在此代碼的頂部編寫此if statement
,並將所有代碼放在此處:
if (!ispostback)
{
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.