Я работаю с порталом, который имеет сетку и внутри сетки, у меня есть два текстовых поля, которые можно назвать как txtEmployeeNumber и txtEmployeeName. И я создал событие text_changed на txtEmployeeNumber, чтобы после публикации второго текста были заполнены соответствующие данные, такие как EmployeeName. Пожалуйста, сообщите мне, что мне следует изменить в этом. Я попытался OPENQUERY
, который обрабатывается в источнике (связанном сервере), но не работает как принято. Есть ли какой-либо другой подход для получения данных как можно быстрее.
Я также использую трассировку и триггер на странице и внутри моей UpdatePanel соответственно
Trace="true"
и
<Triggers>
<asp:AsyncPostBackTrigger ControlID="txtEmployeeNumber" EventName="TextChanged" />
</Triggers>
на моей странице aspx для быстрой обратной передачи, но никаких изменений я не нашел
Моя хранимая процедура
CREATE procedure [dbo].[SP_Get_Employee_Name]
@Employee_ID nvarchar(max)
AS
BEGIN
DECLARE @emp_name nvarchar(max)
SELECT @emp_name = Employee_Name FROM [938.987.644.336].[something].[dbo].[tbl_Employee]
WHERE Personnel_Number= @Employee_ID
IF (@emp_name is null or @emp_name = '')
BEGIN
SELECT @emp_name = Name from [938.987.644.336].[something].[dbo].[tbl_Contract1_Employee]
WHERE [Unique id]= '110'+ @Employee_ID
END
SELECT @emp_name AS Employee_Name
END
C # код:
protected void txtEmployeeNumber_TextChanged(object sender, EventArgs e)
{
string EmployeeNo = "";
foreach (GridViewRow row in grdRegister.Rows)
{
if (row.RowType != DataControlRowType.DataRow)
continue;
EmployeeNo = (row.Cells[1].FindControl("txtEmployeeNumber") as TextBox).Text;
SqlCommand cmd = new SqlCommand("SP_Get_Employee_Name", Con.OpenConnection());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Employee_ID", EmployeeNo);
Con.OpenConnection();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
(row.Cells[2].FindControl("txtEmployeeName") as TextBox).Text = dt.Rows[0]["Employee_Name"].ToString();
}
}
}