07navneet Ответов: 3

Gridview не обновляется


HTML:-
<asp:GridView runat="server" ID="gv2" AutoGenerateColumns="false" AutoGenerateEditButton="true"

            AutoGenerateDeleteButton="true" OnRowEditing="edit" OnRowUpdating="update" OnRowDeleting="delete"

            OnRowCancelingEdit="cancel">
            <Columns>
                <asp:TemplateField HeaderText="ID">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblId" Text='<%#Eval("s_id") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                    <asp:Label runat=server ID="lblId1" Text='<%#Eval("s_id") %>'></asp:Label>
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Name">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblName" Text='<%#Eval("s_name") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" ID="txtName" Text='<%#Eval("s_name") %>'></asp:TextBox>
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Phone">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblPhone" Text='<%#Eval("s_phone") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" ID="txtPhone" Text='<%#Eval("s_phone") %>'></asp:TextBox>
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Degree">
                    <ItemTemplate>
                        <asp:Label runat="server" ID="lblDegree" Text='<%#Eval("s_degree") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox runat="server" ID="txtDegree" Text='<%#Eval("s_degree") %>'></asp:TextBox>
                    </EditItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


Код(.cs):-
public void update(object sender, GridViewUpdateEventArgs e)
        {
            con.Open();
            Label lbl = gv2.Rows[e.RowIndex].FindControl("lblId1") as Label;
            TextBox txtName = gv2.Rows[e.RowIndex].FindControl("txtName") as TextBox;
            TextBox txtPhone = gv2.Rows[e.RowIndex].FindControl("txtPhone") as TextBox;
            TextBox txtDegree = gv2.Rows[e.RowIndex].FindControl("txtDegree") as TextBox;
            SqlCommand cmd2 = new SqlCommand();
            cmd2.Connection = con;
            cmd2.CommandText = "UpdateInfo";
            cmd2.CommandType = CommandType.StoredProcedure;
            cmd2.Parameters.Add("@s_name", SqlDbType.VarChar).Value = txtName.Text.ToString();
            cmd2.Parameters.Add("@s_phone", SqlDbType.VarChar).Value = txtPhone.Text.ToString();
            cmd2.Parameters.Add("@s_degree", SqlDbType.VarChar).Value = txtDegree.Text.ToString();
            cmd2.Parameters.Add("@s_id", SqlDbType.Int).Value = Convert.ToInt32(lbl.Text);
            cmd2.ExecuteNonQuery();
            lblTest.Text = txtName.Text;//was checking value but previous value printing here
            cmd2.Dispose();
            gv2.EditIndex = -1;
            con.Close();
            BindData();
        }

Процедура:-
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[UpdateInfo]
(
	@s_name varchar(300),
	@s_phone varchar(50),
	@s_degree varchar(300),
	@s_id int
)
as
begin
update info set s_name=@s_name, s_phone=@s_phone, s_degree=@s_degree where s_id=@s_id
end


Цитата:
Ребята, проблема здесь в том, что мне нужно удалить старую строку и вставить новую строку в Gridview в режиме редактирования. Так что помогите мне с некоторым кодом, который вставлял бы/обновлял новые значения, заданные в режиме редактирования, а также очищал бы предыдущее сохраненное / привязанное значение.
Когда я обновляю, Gridview удерживает в нем значение привязки, таким образом, не позволяя операции обновления вызывать эффекты.

sriman.ch

это метания какие-либо ошибки ? проверьте, получаете ли Вы значения для обновления ...

Karthik Harve

Покажите функцию " BindData ();"...!!!!

07navneet

public void BindData()
{
против.Открыть();
Sqlcommand, который cmd1 = новый sqlcommand, который();
cmd1.Подключение = кон;
cmd1. CommandText = " GetInfo";
cmd1. CommandType = CommandType.Хранимая процедура;
//SqlDataReader rdr = cmd1.Метода executereader();
//ГВ2.Источник данных = РДР;
SqlDataAdapter da = новый SqlDataAdapter(cmd1);
DataSet ds = новый набор данных();
да.Заполнить(ДС);
gv2. DataSource = ds;
в ГВ2.Привязку();
cmd1.Распоряжаться();
против.Закрывать();
}

07navneet

никакой ошибки!

3 Ответов

Рейтинг:
28

07navneet

При загрузке страницы я просто вызывал функцию BindData, но техника состояла в том, чтобы вызвать ее, когда она не была обратной!

if(!Page.IsPostBack)
                BindData();


Рейтинг:
2

Manish.Insan

Я думаю, что ваша таблица обновляется с помощью этого запроса, поэтому ваши данные не обновляются в сетке.Попробовать это :

update info set s_name='''+@s_name+''', s_phone='''+@s_phone+''', s_degree='''+@s_degree+''' where s_id=@s_id


Надеюсь, это вам поможет.
Не забудьте отметить как ответ, если это поможет. :)


07navneet

Моя-это хранимая процедура (MS-SQL), и вы даете мне синтаксис для написания кода в файле .cs!

Рейтинг:
0

Jitendra Parida - Jeetu

Привет,

Если ваши данные успешно обновились в таблице базы данных, то вы вызываете функцию, которая связывает данные в gridview, после функции обновления.


07navneet

нет, это не обновление! После ввода нового (edit) значения я извлекаю текст 'txtname. text' в фиктивное текстовое поле, но новое значение не извлекается в фиктивное!