我有一个GridView
,并且SelectedIndexChanged
代码被解雇了:
protected void grdEntry_SelectedIndexChanged(object sender, EventArgs e)
{
lblAssignId.Text = grdEntry.SelectedRow.Cells[1].Text == " "
? ""
: grdEntry.SelectedRow.Cells[1].Text;
Ob.BranchId = Globals.BranchID;
Ob.AssignId = lblAssignId.Text;
DataSet dsMain = GetAssignDetails(Ob);
if (dsMain.Tables[0].Rows.Count != 0)
{
// some other code
Task.Factory.StartNew(() => FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId));
}
}
和填写会员ID的代码是
private void FillMemberShipAndBarCode(string customerCode, string branchId)
{
var sqlCommand = new SqlCommand
{
CommandText = "sp_customermaster",
CommandType = CommandType.StoredProcedure
};
sqlCommand.Parameters.AddWithValue("@CustomerCode", customerCode);
sqlCommand.Parameters.AddWithValue("@BranchId", branchId);
sqlCommand.Parameters.AddWithValue("@Flag", 18);
var data = PrjClass.GetData(sqlCommand);
txtMemberShip.Text = data.Tables[0].Rows[0]["MembershipId"].ToString();
txtBarCode.Text = data.Tables[0].Rows[0]["Barcode"].ToString();
}
它工作正常,但是没有更新任何文本框。此外,我在观察窗口中检查,值按预期返回(M-1213
和634-98-4
),代码确实到达txtMemberShip.Text = data.Tables[0].Rows[0]["MembershipId"].ToString();
点
但txtMemberShip
只是空了???任何人都可以告诉我为什么不更新文本框?
更新
根据评论,这是页面加载
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDown();
BindGrid();
SetDefaultsInTextBoxes();
}
}
我没有任何等待此任务的代码。
答案 0 :(得分:1)
不要这样做:
Task.Factory.StartNew(() => FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId));
你想通过这样做实现什么目标?
可能发生的是你的方法FillMemberShipAndBarCode
可能在ASP.NET已经将页面发送回浏览器之后运行。因此,基本上,对呈现的HTML没有可见的影响。
ASP.NET不是一个做多线程的好地方。
尝试用以下方法替换上述内容:
FillMemberShipAndBarCode(dsMain.Tables[0].Rows[0]["CustomerCode"].ToString(), Ob.BranchId);