Минимизация звонки в DataBinder.Eval
Метод DataBinder.Eval использует отражение, чтобы оценить аргументы, которые передаются в и возвращать результаты. Если у вас есть таблица, содержащая 100 строк и 10 столбцов, вы вызываете DataBinder.Eval 1000 раз, если вы используете DataBinder.Eval для каждого столбца. В этом случае ваш выбор использовать DataBinder.Eval умножается на 1000 раз. Ограничение использования DataBinder.Eval во время операций привязки данных значительно повышает производительность страницы. Рассмотрим элемент ItemTemplate в элементе управления Repeater, используя DataBinder.Eval.
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem,"field1") %></td>
<td><%# DataBinder.Eval(Container.DataItem,"field2") %></td>
</tr>
</ItemTemplate>
В этом сценарии есть альтернативы использованию DataBinder.Eval. Альтернативы включают следующее:
Использовать явное литье. Использование явного кастинга обеспечивает лучшую производительность, избегая затрат на отражение. Вставьте Container.DataItem в DataRowView.
<ItemTemplate>
<tr>
<td><%# ((DataRowView)Container.DataItem)["field1"] %></td>
<td><%# ((DataRowView)Container.DataItem)["field2"] %></td>
</tr>
</ItemTemplate>
Вы можете получить еще более высокую производительность с явной отливкой, если вы используете DataReader, чтобы связать свой контроль и использовать специализированные методы для извлечения данных. Вставьте Container.DataItem как DbDataRecord.
<ItemTemplate>
<tr>
<td><%# ((DbDataRecord)Container.DataItem).GetString(0) %></td>
<td><%# ((DbDataRecord)Container.DataItem).GetInt(1) %></td>
</tr>
</ItemTemplate>
Явное литье зависит от типа источника данных, к которому вы привязываетесь; предыдущий код иллюстрирует пример.
Используйте событие ItemDataBound. Если запись, связанная с данными, содержит много полей, может быть более эффективным использование события ItemDataBound. Используя это событие, вы только выполняете преобразование типа один раз. В следующем примере используется объект DataSet.
protected void Repeater_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
Response.Write(string.Format("<td>{0}</td>",drv["field1"]));
Response.Write(string.Format("<td>{0}</td>",drv["field2"]));
Response.Write(string.Format("<td>{0}</td>",drv["field3"]));
Response.Write(string.Format("<td>{0}</td>",drv["field4"]));
}
, спасибо за ответ, можете предложить мне какое-либо решение, с помощью которого я могу привязать данные к простому элементу управления HTML.Beacuse. Я хочу привязать данные к тегу ''. –
да убедитесь, что тег запускается на сервере и привязывает его к событию ItemDataBound, очень легко сделать и более легко прочитать позже. –