Q:
У меня следующая проблема, и я не знаю, как ее исправить.
У меня есть grid view
, один из столбцов - template field
как (текстовое поле). Вид сетки состоит из 8
строк. То, что я делаю, это каждый раз, когда пользователь вводит данные в текстовое поле, я помещаю итоговое значение в последнее текстовое поле (для которого установлено enabled = false). Я суммирую ввод данных в текстовые поля с помощью какого-либо метода и вызываю его в событии text changed
. Но каждый раз, когда я вписываю число в текстовое поле и затем нажимаю Tab in the keyboard
или использую курсор мыши для перехода к следующему полю, я теряю фокус, и мне приходится снова помещать курсор мыши в нужное текстовое поле.
Я пытаюсь решить эту проблему следующими способами, но тщетно.
foreach (GridViewRow r in gv_Evaluation.Rows)
{
((RadTextBox)r.Cells[3].FindControl("txt_evaluateWeights")).Attributes.Add("blur", "calc()");
}
при загрузке моей страницы это вообще не работает.
protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e)
{
calc();
((TextBox)sender).Focus();
}
Таким способом можно вернуть фокус к предыдущему текстовому полю (я имею в виду то, что я уже сделал), а не к текстовому полю, в котором я хочу сфокусироваться, чтобы ввести данные.
EDIT:
Мой метод расчета:
private void calc()
{
float sum = 0;
for (int i = 0; i < 7; i++)
{
RadTextBox txt1 = (RadTextBox)gv_Evaluation.Rows[i].Cells[3].FindControl("txt_evaluateWeights");
int weight;
bool result = Int32.TryParse(txt1.Text, out weight);
if (result)
{
sum += weight;
}
}
double percentage;
percentage = Math.Round((sum / 100) * 100, 2);
RadTextBox txt3 = (RadTextBox)gv_Evaluation.Rows[7].Cells[3].FindControl("txt_evaluateWeights");
txt3.Text = percentage.ToString();//string.Format("{0:0.0%}", percentage.ToString());
}