2013-10-12 3 views
1

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

Вот мой дизайн страницы

<asp:GridView ID="grdCompanyUsers" runat="server" 
    DataKeyNames="id_company_user,nm_company_username" 
    AutoGenerateColumns="false" GridLines="None" CssClass="grid" AlternatingRowStyle- 
    BackColor="#DDE0EF" OnRowDataBound="grdCompanyUsers_DataBound"> 
    <Columns> 
    <asp:TemplateField> 
    <EditItemTemplate> 
    <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" ImageUrl="~/Images 
    /Cancel.jpg" ToolTip="Cancel" Height="20px" Width="20px" /> 
    </EditItemTemplate> 
    <ItemTemplate> 
    <asp:Label ID="CompUserID" runat="server" Width="15" 
    Text='<%#Eval("id_company_user")%>'> </asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="companyusername" runat="server" Width="51" 
    Text='<%#Eval("nm_company_username")%>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="compName" runat="server" Width="56" Text='<%#Eval("nm_company_name")%>'> 
    </asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="compDesc" runat="server" Width="129" Text='<%#Eval("nm_company_desc")%>'> 
    </asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="compEmail" runat="server" Width="103px" 
    Text='<%#Eval("nm_company_email_address")%>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label ID="compAddress" runat="server" Width="153px" 
    Text='<%#Eval("nm_company_address")%>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:CheckBox ID="chkBoxStatus" runat="server" Width="15px" Enabled="false" 
    Text='<%#Eval("ind_active")%>'> 
    </asp:CheckBox> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:LinkButton ID="btnEdit" runat="server" Font-Underline="false" 
    CommandArgument='<%#Eval ("id_company_user")%>' 
    OnClick="btnEdit_Click">Edit</asp:LinkButton> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <ItemTemplate> 
    <asp:LinkButton runat="server" ID="lnkDeny" Font-Underline="false" CommandName="Deny" 
    CommandArgument='<%# Eval("id_company_user") %>' 
    OnClick="btnDeny_Click">Deny</asp:LinkButton> 
    </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 

Вот мой код позади ASPX страницы

protected void btnEdit_Click(object sender, EventArgs e) 
    { 
     LinkButton btn = (LinkButton)sender; 
     GridViewRow row = (GridViewRow)btn.NamingContainer; 
     int i = Convert.ToInt32(row.RowIndex); 
     _connString = ConfigurationManager.AppSettings["connString"]; 
     using (SqlConnection conn = new SqlConnection(_connString)) 
      { 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand("update ref_registration_company_user 
       set ind_active=1 where id_company_user=id_company_user", conn); 
       cmd.ExecuteNonQuery(); 
       conn.Close(); 
      }  

    } 

Вот Дизайн Вид:

enter image description here

Я просто хочу, что только выбранная строка должна быть затронута в базе данных. Я буду благодарен за помощь.

+0

может у пожалуйста, положить дизайн (.aspx) отсюда? –

ответ

2

вам нужно установить значение id_company_user в вашем SQL заявление. используйте параметры, как показано ниже.

SqlCommand cmd = new SqlCommand("update ref_registration_company_user set ind_active=1 where [email protected]_company_user", conn); 
cmd.Parameters.AddWithValue("@id_company_user", id); 

вам нужно получить текущую строку id_company_user проверить значение ниже SO вопрос и ответ, вы можете использовать OnRowCommand из GridView и CommandArgument недвижимости

GridView: Get datakey of the row on button click

<asp:GridView ID="grdCompanyUsers" runat="server" DataKeyNames="id_company_user,nm_company_username" AutoGenerateColumns="false" GridLines="None" CssClass="grid" AlternatingRowStyle-BackColor="#DDE0EF" OnRowDataBound="grdCompanyUsers_DataBound" 
     OnRowCommand="myGridView_RowCommand"> 
    <Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:LinkButton ID="btnEdit" runat="server" Font-Underline="false" CommandArgument='<%#Eval ("id_company_user")%>' CommandName="Edit">Edit</asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

код позади:

protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    var id= int.Parse(e.CommandArgument); 
    _connString = ConfigurationManager.AppSettings["connString"]; 
    using (SqlConnection conn = new SqlConnection(_connString)) 
    { 
     conn.Open(); 
     using(SqlCommand cmd = new SqlCommand("update ref_registration_company_user set ind_active=1 where id_company_user=id_company_user", conn)) 
     { 
      cmd.Parameters.AddWithValue("@id_company_user", id); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
+0

Да! Теперь он работает :) просто добавьте строку CompanyUserId = btn.CommandArgument; SqlCommand cmd = new SqlCommand ("update ref_registration_company_user set ind_active = 1 где id_company_user = @ id_company_user", conn); cmd.Parameters.AddWithValue ("@ id_company_user", CompanyUserId); –

1

Можете ли вы проверить, как только ваш запрос обновления, где положение,

+0

не понял? –

+1

где id_company_user = id_company_user, здесь вы сравниваете имя ключа данных только с именем ключа данных, где вам нужно передать параметр для сравнения. – Gurunadh

Смежные вопросы