asp.net как обновить gridview - PullRequest
0 голосов
/ 08 июля 2011

Я пытаюсь обновить вид сетки после вставки, но у меня это не работает, вот мой код:

<asp:TextBox ID="TimeBox" runat="server" />
                <asp:TextBox ID="CommentBox" runat="server" TextMode="MultiLine" />
                    <asp:Button ID="insButton" runat="server" OnClick="insert" Text="Insert" />
<asp:GridView ID="MainGrid" runat="server">
</asp:GridView>

и вот код:

    protected void Page_Load(object sender, EventArgs e)
{
    // filling the grid view

    SqlConnection conn = new SqlConnection (@"connectionString");
    SqlCommand cmd = new SqlCommand("SELECT tim,com FROM ten",conn);
    conn.Open();

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);

    MainGrid.DataSource = ds;
    MainGrid.DataBind();  
}

protected void insert(object sender, EventArgs e) //adding the comments 
{
    SqlConnection conn = new SqlConnection(@"connectionString");
    SqlCommand cmd = new SqlCommand("INSERT INTO tennis (tim,com) VALUES (@tim,@com)", conn);
    cmd.Parameters.AddWithValue("@tim", TimBox.Text);
    cmd.Parameters.AddWithValue("@com", ComBox.Text);

    conn.Open();
    cmd.ExecuteNonQuery();
    MainGrid.DataBind();
    conn.Close();
}

вставка работает нормально, и я могу видеть данные, если я обновляю страницу, но я пытаюсь обновить вид сетки только без обновления страницы.

Ответы [ 3 ]

5 голосов
/ 08 июля 2011

Теперь, когда вы вставили запись, вам нужно перепривязать свою сетку данных, используя эти новые данные. Я рекомендую немного изменить код, чтобы не нарушать принцип DRY (не повторять себя) и извлекать вызов данных в свой собственный метод.

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        MainGrid.DataSource = GetData();
        MainGrid.DataBind();  
    }
}

protected void insert(object sender, EventArgs e) //adding the comments 
{
    SqlConnection conn = new SqlConnection(@"connectionString");
    SqlCommand cmd = new SqlCommand("INSERT INTO tennis (tim,com) VALUES (@tim,@com)", conn);
    cmd.Parameters.AddWithValue("@tim", TimBox.Text);
    cmd.Parameters.AddWithValue("@com", ComBox.Text);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    MainGrid.DataSource = GetData();
    MainGrid.DataBind();
}

protected DataSet GetData()
{
    SqlConnection conn = new SqlConnection (@"connectionString");
    SqlCommand cmd = new SqlCommand("SELECT tim,com FROM ten",conn);
    conn.Open();

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(ds);

    return ds;
}
0 голосов
/ 08 июля 2011

Вы не видите ожидаемых результатов, потому что событие для вашей кнопки вставки обрабатывается после визуализации сетки.

См. http://msdn.microsoft.com/en-us/library/ms178472.aspx

В результате данные добавляются в таблицу после ее отображения и почему работает F5

Вместо этого переместите содержимое загрузки страницы в событие PreRender, и все должно быть хорошо

0 голосов
/ 08 июля 2011

После вставки новой записи вам необходимо повторно выполнить запрос к базе данных и заново связать сетку (так же, как вы делаете это в Page_Load) с источником данных, который включает новую вставленную запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...