Обновление сообщения из списка сообщений


Я не написал привязки конкретного сообщения в GridView часть. Это обновление показывает, что конкретное сообщение или сообщение из списка сообщений, связано с XML-файлом. Моей главной задачей является исключение избыточного кода в другой части. Какие-либо предложения?

protected void grdMessage_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    DataRow xRow;
    DataSet mdsRedirect = new DataSet();
    mdsRedirect.ReadXml(st);

    if (Request["MessageID"] != null && Convert.ToInt16(Request["MessageID"]) != 0)
    {   
        //Find specific item from XML and set updated value
        mdsRedirect.Tables[0].DefaultView.RowFilter = "MessageID=" + Convert.ToInt16(Request["MessageID"]);
        if (mdsRedirect.Tables[0].DefaultView.Count > 0)
        {
            mdsRedirect.Tables[0].DefaultView[0]["MessageText"] = ((TextBox)(grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage"))).Text;
            mdsRedirect.Tables[0].DefaultView.RowFilter = string.Empty;
        }
        else {
            xRow = mdsRedirect.Tables[0].Rows[e.RowIndex];
            xRow["MessageText"] = ((TextBox)(grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage"))).Text;
        }
    }
    else
    {
        xRow = mdsRedirect.Tables[0].Rows[e.RowIndex];
        xRow["MessageText"] = ((TextBox)(grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage"))).Text;
    }

    grdMessage.EditIndex = -1;
    mdsRedirect.WriteXml(st);
    mdsRedirect.Dispose();
    getxml();//read XML file and bind it
}


422
1
c#
задан 29 ноября 2011 в 01:11 Источник Поделиться
Комментарии
2 ответа

Не уверен, если это "оптимизация", но вот что-то упрощения:

    protected void grdMessage_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string messageIdString = Request["MessageID"];
int messageId = messageIdString == null ? 0 : Convert.ToInt16(messageIdString);

using (DataSet mdsRedirect = new DataSet())
{
DataTable table = mdsRedirect.Tables[0];
string updateMessageText = ((TextBox)grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage")).Text;

mdsRedirect.ReadXml(st);
table.DefaultView.RowFilter = messageId == 0 ? table.DefaultView.RowFilter : "MessageID=" + messageId;
if ((messageId != 0) && (table.DefaultView.Count > 0))
{
// Find specific item from XML and set updated value
table.DefaultView[0]["MessageText"] = updateMessageText;
table.DefaultView.RowFilter = string.Empty;
}
else
{
table.Rows[e.RowIndex]["MessageText"] = updateMessageText;
}

grdMessage.EditIndex = -1;
mdsRedirect.WriteXml(st);
}

getxml(); // read XML file and bind it
}

2
ответ дан 29 ноября 2011 в 02:11 Источник Поделиться

Я не c# гуру, поэтому лишь некоторые общие советы:

Эта линия очень-очень долго, трудно читать и слишком много точек в нем:

mdsRedirect.Tables[0].DefaultView[0]["MessageText"] = ((TextBox)(grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage"))).Text;

Код использовать mdsRedirect.Таблицы[0] много раз, создайте локальную переменную для этого в начале метода:

MyTable table = mdsRedirect.Tables[0];
...
table.DefaultView[0]["MessageText"] = ((TextBox)(grdMessage.Rows[e.RowIndex].FindControl("txtupdMessage"))).Text;

Я также хотел извлекать следующий метод:

private String getTextFromRow(int rowIndex) {
Row row = grdMessage.Rows[rowIndex];
Control control = row.FindControl("txtupdMessage");
TextBox textBox = (TextBox) control;
return textBox.Text;
}

Тогда код:

MyTable table = mdsRedirect.Tables[0];
...
table.DefaultView[0]["MessageText"] = getTextFromRow(e.RowIndex);

2
ответ дан 29 ноября 2011 в 10:11 Источник Поделиться