2010-07-29 3 views
1

У меня есть GridView, который извлекает данные из базы данных. Пользователи имеют роли, некоторые из пользователей будут обновлять один столбец в GridView, а другие будут обновлять другие столбцы в соответствии с ролями, см. Код ниже !. Я создал хранимые процедуры, как показано ниже, и добавил код. Когда я тестировал проект с ролью (AR-Translator) в качестве примера после редактирования столбца в виде сетки, он заменяет другие значения со значением NULL, поэтому, пожалуйста, что я могу сделать?update specfic column в виде сетки

хранимая процедура

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 

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

Могли бы вы уточнить quesiton немного больше? Не могу понять, что вы спрашиваете ... вы хотите вручную обновить столбцы gridview? – mint

+0

похоже, что у него проблемы с нулевыми символами ... или, возможно, с его удалением столбца? Надеюсь, я правильно перевел .. – Nix

+0

Я отредактировал вопрос, который, я думаю, вы поймете – Myworld

ответ

0

Я думаю, вам нужно обновить «обновить» SP как этот

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

Я не полностью понимаю , Но если у меня есть суть ... по умолчанию нули возвращаются из базы данных следующим образом:

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

проблема все еще была. Когда я сделал обновление для конкретного столбца, он заменил другие значения полей значением NULL – Myworld

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