首页  > 世界杯开幕式

【求助|已解决】C# ASP.Net 为什么GridView有数据但前端不显示

问题描述:我要做一个单位选择页面,在一个GV里选择完单位后会插入到另一个GV里,之前还很正常,后面不知道改了什么就变成后台debug的时候确定插入的GridView是有绑定了数据的,但是前端却没有正常显示数据

删除

这是前端代码↑

这是后端代码↓

protected void btn_item_add_Click(object sender, EventArgs e)

{

try

{

//SetData();

List orlist = new List();

orlist = orlist.GroupBy(x => x.AgencyNo).Select(x => x.First()).ToList();

Session["comlist"] = orlist;

//创建临时数据源,先暂时存下已有数据

DataTable tempdt = new DataTable();

DataColumn dc1 = null;

dc1 = tempdt.Columns.Add("ID", Type.GetType("System.Int32"));

dc1.AutoIncrement = true;

dc1.AutoIncrementSeed = 1;

dc1.AutoIncrementStep = 1;

dc1.AllowDBNull = false;

double Ratio = 0;

decimal Mayang = 0;

decimal Money = 0;

decimal Price = 0;

dc1 = tempdt.Columns.Add("agencyno", Type.GetType("System.String"));

dc1 = tempdt.Columns.Add("agencyname", Type.GetType("System.String"));

dc1 = tempdt.Columns.Add("ratio", Type.GetType("System.String"));

dc1 = tempdt.Columns.Add("money", Type.GetType("System.String"));

dc1 = tempdt.Columns.Add("djprice", Type.GetType("System.String"));

dc1 = tempdt.Columns.Add("mayang", Type.GetType("System.String"));

//插入分配列表已有记录到临时数据源

for (int j = 0; j < gv_bl.Rows.Count; j++)

{

DataRow row = tempdt.NewRow();

TextBox ratio = gv_bl.Rows[j].FindControl("txt_scale") as TextBox;

TextBox mayang = gv_bl.Rows[j].FindControl("txt_bdmayang") as TextBox;

row["agencyname"] = gv_bl.Rows[j].Cells[2].Text;

row["agencyno"] = gv_bl.Rows[j].Cells[1].Text;

row["ratio"] = ratio.Text;

row["money"] = gv_bl.Rows[j].Cells[5].Text;

row["mayang"] = mayang.Text;

row["djprice"] = gv_bl.Rows[j].Cells[6].Text;

Ratio += Convert.ToDouble(ratio.Text);

Mayang += Convert.ToDecimal(mayang.Text);

Money += Convert.ToDecimal(gv_bl.Rows[j].Cells[5].Text);

Price += Convert.ToDecimal(gv_bl.Rows[j].Cells[6].Text);

tempdt.Rows.Add(row);

}

for (int i = 0; i < gv_com.Rows.Count; i++)

{

CheckBox ck = gv_com.Rows[i].FindControl("cb_item") as CheckBox;

if (ck.Checked == true)

{

//添加

DataRow row1 = tempdt.NewRow();

row1["agencyname"] = gv_com.Rows[i].Cells[3].Text;

row1["agencyno"] = gv_com.Rows[i].Cells[2].Text;

row1["ratio"] = "0";

row1["money"] = "0";

row1["mayang"] = "0";

row1["djprice"] = "0";

tempdt.Rows.Add(row1);

}

}

//排重

for (int k = 0; k < tempdt.Rows.Count; k++)

{

for (int m = tempdt.Rows.Count - 1; m > 0; m--)

{

if (k != m && tempdt.Rows[k]["agencyno"].ToString() == tempdt.Rows[m]["agencyno"].ToString())

{

tempdt.Rows.RemoveAt(k);

k--;

m = tempdt.Rows.Count - 1;

break;

}

}

}

for (int i = 0; i < tempdt.Rows.Count; i++)

{

orlist.Add(WriteData(i, tempdt));

}

if (Session["comlist"] == null)

{

Session.Add("comlist", orlist);

}

else

{

Session["comlist"] = null;

Session.Add("comlist", orlist);

}

lblHratio.Text = Math.Round(Ratio, 2).ToString();

lblHmayang.Text = Math.Round(Mayang, 2).ToString();

lblHmoney.Text = Math.Round(Money, 2).ToString();

lblHDjsy.Text = Math.Round(Price, 2).ToString();

gv_bl.Visible = true;

gv_bl.Enabled = true;

gv_bl.DataSource = tempdt;

gv_bl.DataBind();

gv_bl.FooterRow.Cells[3].Text = "0";

gv_bl.FooterRow.Cells[4].Text = "0";

gv_bl.FooterRow.Cells[5].Text = "0";

gv_bl.FooterRow.Cells[6].Text = "0";

}catch(Exception ex)

{

ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "alertScript", "", false);

return;

}

}

正常显示页面↓

异常显示↓

相关控件代码↓

排查了好久,网上查了很多,诸如GV的列名没跟绑定的数据源对应上,控件问题什么的,仍然没有解决问题,还望大佬们帮帮忙,看看结症在何处🙏🙏🙏

==========================问题原因==========================

问了现实中的大佬,说会不会是UpdatePanel的原因,试着根据提示去找原因,还真是。。。

原来的【添加单位】按钮被我放在了UpdatePanel3里面,而进行数据写入的GridView被我直接放在了form里面,当我把按钮移到form里面后,数据就正常显示了

但是这样按钮摆放的位置就不够合理,于是了解了一下UpdatePanel,看看怎么在UpdatePanel中实现可回发按钮对外部的刷新,以下内容对我起到了帮助↓

updatePanel有两个属性,一个是AsyncPostBackTrigger属性,一个是PostBackTrigger属性;

第一个属性用来指定UpdatePanel外的控件,如Button,ImageButton等可回发控件对UpdatePanel的刷新。如果没有指定,点击按钮会对UpdatePanel进行刷新,但不是异步更新,而是整页传送;第二个属性是用来指定UpdatePanel中可回发的控件,对外部的刷新。如果不指定,则点击UpdatePanel中可回发的控件,对外面的页面内容不能刷新。

资料地址:ASP.NET之UpdatePanel控件 - 全栈程序员必看 (javaforall.cn)

根据资料中的指引用PostBackTrigger指定了【添加单位】控件,经测试,代码顺利运行。

这个问题就此解决!本菜鸟又获得了新的经验 get✔

编译器:VS2019