【发布时间】:2013-05-30 08:23:03
【问题描述】:
我有一个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 仍然是空的???谁能告诉我为什么不更新文本框?
更新
根据 cmets,这里是页面加载
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindDropDown();
BindGrid();
SetDefaultsInTextBoxes();
}
}
而且我没有任何代码等待这个任务。
【问题讨论】:
-
告诉我你的
page_load,你在page_load中使用page.ispostback吗 -
您是否有代码在执行渲染之前等待这些任务完成?
-
@Rahul:更新了问题。
-
确定
GetData方法的返回类型是什么,并检查var data是否实际上从procedure获取值。 -
好的,告诉我一件事
txtBarCode.Text正在获得价值,或者它还显示empty..
标签: asp.net multithreading gridview textbox task