2010-07-29 6 views
1

I ont un GridView qui récupère des données à partir d'une base de données. Les utilisateurs ont des rôles, certains utilisateurs mettront à jour une colonne dans GridView et d'autres mettront à jour une autre colonne en fonction des rôles voir le code ci-dessous! J'ai créé les procédures stockées comme ci-dessous et j'ai ajouté du code. Quand j'ai testé le projet, avec le rôle (AR-Translator) comme exemple après avoir édité la colonne dans la vue de la grille, il remplace les autres fies avec la valeur NULL, alors s'il vous plaît ce que je peux faire?mise à jour colonne specfic en vue de grille

procédure stockée

ALTER Proc [dbo].[GetAllTranslation] 
AS 
BEGIN 
    Select Id,Word 
    ,Trans_AR 
    ,Trans_EN 
    ,Add_Date 
    From Translation 
END 

ALTER Proc [dbo].[UpdateTranslation] 
(
    @IdINT 
    ,@Word NVARCHAR(MAX) 
    ,@Trans_AR NVARCHAR(MAX) 
    ,@Trans_EN NVARCHAR(MAX) 


) 
AS 
BEGIN 
    UPDATE Translation SET 

    Word [email protected] 
    ,[email protected]_AR 
    ,[email protected]_EN 

    WHERE [email protected] 
END 

page ASPX

<div class="m10"> 
    <asp:GridView ID="GridView1" runat="server" BackColor="White" 
    BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
    ForeColor="Black" GridLines="Vertical" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="Id" 
    DataSourceID="SDSTrans" onrowupdated="GridView1_RowUpdated"> 
    <FooterStyle BackColor="#CCCC99" /> 
    <RowStyle BackColor="#F7F7DE" /> 
    <Columns> 
     <asp:CommandField HeaderText="Function" ShowEditButton="True" /> 
     <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
      ReadOnly="True" SortExpression="Id" /> 
     <asp:BoundField DataField="Word" HeaderText="Word" SortExpression="Word" /> 
     <asp:BoundField DataField="Trans_AR" HeaderText="Trans_AR" 
      SortExpression="Trans_AR" /> 
     <asp:BoundField DataField="Trans_EN" HeaderText="Trans_EN" 
      SortExpression="Trans_EN" /> 
     <asp:BoundField DataField="Add_Date" HeaderText="Add_Date" 
      SortExpression="Add_Date" /> 
    </Columns> 
    <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" /> 
    <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" /> 
    <AlternatingRowStyle BackColor="White" /> 
</asp:GridView> 
    <asp:SqlDataSource ID="SDSTrans" runat="server" 
     ConnectionString="Data Source=ELARABY-1EACFA3\SQLEXPRESS;Initial Catalog=ElarabyGroup;Integrated Security=True" 
     ProviderName="System.Data.SqlClient" SelectCommand="GetAllTranslation" 
     SelectCommandType="StoredProcedure" UpdateCommand="UpdateTranslation" 
     UpdateCommandType="StoredProcedure"> 
     <UpdateParameters> 
      <asp:ControlParameter ControlID="GridView1" Name="Id" 
       PropertyName="SelectedValue" Type="Int32" /> 
      <asp:ControlParameter ControlID="GridView1" Name="Word" 
       PropertyName="SelectedValue" Type="String" /> 
      <asp:ControlParameter ControlID="GridView1" Name="Trans_AR" 
       PropertyName="SelectedValue" Type="String" /> 
      <asp:ControlParameter ControlID="GridView1" Name="Trans_EN" 
       PropertyName="SelectedValue" Type="String" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 
<asp:Label ID="ResultLBL" runat="server" Visible="false"></asp:Label> 
</div> 

CS

public void CheckLoginAuthorty() 
{ 
    using (SqlConnection Con = Connection.GetConnection()) 
    { 
     SqlCommand com = new SqlCommand("CheackLoginInRole", Con); 
     com.CommandType = CommandType.StoredProcedure; 
     com.Parameters.Add(Parameter.NewNVarChar("@Login", Session.Contents["Username"].ToString())); 
     object O = com.ExecuteScalar(); 

     if (O != null) 
     { 
      string S = O.ToString(); 

      if (IsInRole("AR-Translator", O.ToString())) 
      { 

       ((BoundField)GridView1.Columns[2]).ReadOnly = false; 
       ((BoundField)GridView1.Columns[2]).InsertVisible = false; 
       ((BoundField)GridView1.Columns[4]).ReadOnly = false; 
       ((BoundField)GridView1.Columns[4]).InsertVisible = false; 


      } 

      else if (IsInRole("EN-Translator", O.ToString())) 
      { 
       ((BoundField)GridView1.Columns[2]).ReadOnly = true; 
       ((BoundField)GridView1.Columns[2]).InsertVisible = false; 
       ((BoundField)GridView1.Columns[3]).ReadOnly = true; 
       ((BoundField)GridView1.Columns[3]).InsertVisible = false; 
      } 
     } 
    } 
} 
+0

Pouvez-vous clarifier la quesiton un peu plus? Vous n'arrivez pas à comprendre ce que vous demandez ... voulez-vous mettre à jour manuellement les colonnes gridview? – mint

+0

il semble qu'il a des problèmes avec des caractères nuls ... ou peut-être son annulation d'une colonne? J'espère que je traduis correctement .. – Nix

+0

J'ai effectué la question que je pense que vous comprendrez – Myworld

Répondre

0

Je suppose que vous devez mettre à jour votre « mise à jour » SP comme ce

ALTER Proc [dbo].[UpdateTranslation] 
(
    @IdINT 
    ,@Word NVARCHAR(MAX) 
    ,@Trans_AR NVARCHAR(MAX) 
    ,@Trans_EN NVARCHAR(MAX) 


) 
AS 
BEGIN 
    UPDATE Translation SET 

    Word =isnull(@Word,Word) 
    ,Trans_AR=isnull(@Trans_AR, Trans_AR) 
    ,Trans_EN=isnull(@Trans_EN ,Trans_EN) 

    WHERE [email protected] 
END 
0

Je ne suis pas pleinement comprendre , Mais si j'ai l'essentiel ... par défaut les valeurs nulles en revenant de la base de données comme ceci:

ALTER Proc [dbo].[GetAllTranslation] 
AS 
BEGIN 
    Select Id 
    ,isnull(Word,'') as 'Word' 
    ,isnull(Trans_AR,'') as 'Trans_AR' 
    ,isnull(Trans_EN,'') as 'Trans_EN' 
    ,Add_Date 
    From Translation 
END 
+0

le problème est toujours été .when j'ai fait la mise à jour pour la colonne spécifique il remplace les autres valeurs de champs avec la valeur NULL – Myworld

Questions connexes