0

私は、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();
    }
}

そして、このタスクを待機するコードはありません。

4

1 に答える 1

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);
于 2013-05-30T09:59:27.033 に答える