Еще один пример прямого кода:
int n = 0;
if (a) n++;
if (b) n++;
if (c) n++;
return (n >= 2);
Это не самый лаконичный код, очевидно.
Приложение
Еще одна (слегка оптимизированная) версия этого:
int n = -2;
if (a) n++;
if (b) n++;
if (c) n++;
return (n >= 0);
Это может выполняться немного быстрее, предполагая, что сравнение с 0 будет использовать быстрее ( или, возможно, меньше) кода, чем сравнение с 2.
Вы должны привязать DataBind в Page_Load внутри! IsPostBack, как и вы. Вы должны ТАКЖЕ привязать данные к вашему событию Click.
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
this.DataBind();
}
}
protected void MyButton_Click(object sender, EventArgs e)
{
//Code to do stuff here...
//Re DataBind
this.DataBind();
}
public override void DataBind()
{
//Databinding logic here
}
Вместо того, чтобы делать ваш источник данных MySqlDataReader, пусть ваш читатель заполнит BindingList или что-то в этом роде. Держите это в сеансе и выполняйте привязку данных каждый раз, когда не выполняется обратная передача, и нажимайте. Когда ваш пользователь публикует сообщения, вы можете добавить его в список и подождать, пока что-нибудь скажет ему, чтобы сохранить это, но в контексте публикации комментариев имеет смысл сохранить их сообщение в вашей базе данных, повторить свой набор данных и наступить на него. BindingList и повторное связывание данных.
Кроме того, личное раздражение: мне не нравится <% # Eval ....%>. Код на вашей странице - обычно плохой знак. Попробуйте использовать событие Repeater.ItemDataBound http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx
Для меня это звучит как быстрое Исправление заключается в привязке при загрузке страницы независимо от обратной передачи. Кроме того, вы можете выполнить повторную привязку из postCommentButton_Click.