gpt4 book ai didi

c# - 如何将 C# 网络应用程序获取到 "catch up"?

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:32 24 4
gpt4 key购买 nike

我有这个应用程序,我正在使用 C#/.Net 为我们的 Intranet 编写。在一个地方,我正在检查 OnLeave 事件的值以自动填充某些字段。问题是,如果用户直接从字段转到“提交”按钮,OnLeave 事件会触发但字段不会填写。

我在考虑 VBA 中的 DoEvents,看起来我可以使用“Application.DoEvents”,但是当我尝试它时,它本身以红色下划线。我还发现了一个叫做“Render()”的东西,但是当我尝试它时,它本身会用蓝色下划线。

谁能告诉我如何让这段代码“ catch ”自身,以便正确呈现我的所有数据?请记住,我对 C# 还是有些陌生,所以如果您能尽可能明确/详尽,我将不胜感激。

编辑

我将此代码作为文本框的 OnLeave 事件:

    protected void txtClientID_OnLeave(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection(str2))
{
//Query the Reports table to find the record associated with the selected report
using (SqlCommand cmd = new SqlCommand("SELECT * FROM VW_MOS_DPL_AccountValidation WHERE CLIENT_ID = '" + txtClientID.Text + "'", con))
{
con.Open();
using (SqlDataReader DT1 = cmd.ExecuteReader())
{
// If the SQL returns any records, process the info
if (DT1.HasRows)
{
while (DT1.Read())
{
try
{
int TaskID = Convert.ToInt32(ddlTask.SelectedValue);

// This should allow Client ID to autofill if Eligibility --> Enrollment records are used.
// Add more Task IDs to this list if necessary.
List<int> list = new List<int>() { 154, 156, 157, 158, 160, 161, 165 };
if (list.Contains(TaskID))
{
//lblAccountName.Text = (DT1["CUST_NM"].ToString());
Label2.Text = (DT1["CUST_NM"].ToString());
//lblAccountName.Visible = true;
TBAccountNum.Text = (DT1["CUST_NUM"].ToString());
TBAccountNum.Visible = true;
}
}
catch (Exception ae)
{
Response.Write(ae.Message);
}
}
}
// If the SQL returns no records, return a static "No Records Found" message
else
{
//lblAccountName.Text = "No Matching Account Name";
Label2.Text = "No Matching Account Name";
//lblAccountName.Visible = true;
TBAccountNum.Text = "";
}
}
}
}
}

我还有一个提交按钮,按下该按钮后,我要做的第一件事就是确保本应由该 OnLeave 填写的所有字段实际上都已填写。问题是,如果我单步执行它们,它们都有值,但如果我只是运行它,这些值永远不会出现在屏幕上。

我也试过“System.Threading.Thread.Sleep(100);”根据我在另一个网站上看到的推荐,但这似乎没有任何作用。

最佳答案

您可以将该代码移动到它自己的方法 RefreshData 或其他方法中。在 txtClientID_OnLeave 中调用此方法。然后在您的按钮提交点击事件中,检查这些文本框是否为空。如果是,请在单击事件中执行任何其他操作之前调用 RefreshData 方法。

您可能更进一步,在调用 RefreshData 时设置一个标志,并在按钮提交事件中检查此标志,而不是检查文本框是否为空。如果用户在文本框中写入,则提交点击不会在其他情况下检索数据。

private bool _retrievedData = false;

public void RefreshData() {
// do everything you were doing inside the `txtClientID_OnLeave` handler
// make sure to set this flag only if the data was successfully retrieved
// the bottom of the `try` should be good
_retrievedData = true;
}

public void txtClientID_OnLeave(object sender, EventArgs e) {
RefreshData();
}

public void yourButton_Click(object sender, EventArgs e) {
if (_retrievedData == false)
RefreshData();

// do whatever you were doing in this handler because now your textboxes have the
// data it would have if you had left the textbox without going straight to submit
}

现在我确定有更简洁的方法来处理这个问题,但由于您的提交读取了文本框,您真正需要的只是在提交处理程序执行操作之前填写文本框。

关于c# - 如何将 C# 网络应用程序获取到 "catch up"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com