2016-09-14 16 views
1

SQLデータベースでgridviewを作成しました.3つのテキストボックス "CountryID"、 "Name"、 "CountryNotes"を作成し、Webページにボタンを追加しました。 dbとグリッドビューに入力されます。私は編集や更新のためのコーディングを行っていますが、すべてが完璧に動作していますが、更新ボタンをクリックすると詳細がグリッド表示に更新されますが、テキストボックスはクリアされません。ここでGridView、EDIT、更新

私は私のHTMLコードを追加しています:

<form id="form1" runat="server"> 
     <div> 
      <asp:ScriptManager ID="script1" runat="server"></asp:ScriptManager> 
      <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
       <ContentTemplate> 
        <table align="Center" style="width: 50%;"> 
         <tr> 
          <td class="auto-style1"> 
           <asp:Label ID="Label1" runat="server" Text="CountryID" ForeColor="#CC0000"></asp:Label> 
          </td> 
          <td> 
           <asp:TextBox ID="Text1" runat="server"></asp:TextBox> 
          </td> 

         </tr> 
         <tr> 
          <td class="auto-style1"> 
           <asp:Label ID="Label2" runat="server" Text="Name" ForeColor="#CC0000"></asp:Label> 
          </td> 
          <td> 
           <asp:TextBox ID="Text2" runat="server"></asp:TextBox> 
          </td> 

         </tr> 
         <tr> 
          <td class="auto-style1"> 
           <asp:Label ID="Label3" runat="server" Text="CountryNotes" ForeColor="#CC0000"></asp:Label> 
          </td> 
          <td> 
           <asp:TextBox ID="Text3" runat="server"></asp:TextBox> 
          </td> 
         </tr> 
         <tr> 
          <td class="auto-style1"> 
           <asp:Button ID="Button1" runat="server" Text="Add" BackColor="#CC0000" ForeColor="White" ToolTip="Insert" OnClick="Button1_Click" /> 
          </td> 
          <td> 
           <asp:Button ID="Button2" Visible="false" runat="server" BackColor="#CC0000" ForeColor="White" OnClick="Button2_Click" Text="Cancel" /> 
          </td> 
         </tr> 
        </table> 

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CountryID" DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCommand="Row_edit"> 
         <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
         <Columns> 
          <asp:BoundField DataField="CountryID" HeaderText="CountryID" ReadOnly="True" SortExpression="CountryID" /> 
          <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
          <asp:BoundField DataField="CountryNotes" HeaderText="CountryNotes" SortExpression="CountryNotes" /> 
          <asp:ButtonField ButtonType="Image" ImageUrl="~/Edit.png" CommandName="EditRow" /> 
          <asp:ButtonField ButtonType="Image" ImageUrl="~/Delete.png" CommandName="DeleteRow" /> 
         </Columns> 
         <EditRowStyle BackColor="#999999" /> 
         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
         <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
         <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
         <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
         <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
         <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
         <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
        </asp:GridView> 
       </ContentTemplate> 
      </asp:UpdatePanel> 






      <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:ATSConnectionString %>" DeleteCommand="DELETE FROM [Country1] WHERE [CountryID] = @original_CountryID AND [Name] = @original_Name AND [CountryNotes] = @original_CountryNotes" InsertCommand="INSERT INTO [Country1] ([CountryID], [Name], [CountryNotes]) VALUES (@CountryID, @Name, @CountryNotes)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT CountryID, Name, CountryNotes FROM Country1" UpdateCommand="UPDATE [Country1] SET [Name] = @Name, [CountryNotes] = @CountryNotes WHERE [CountryID] = @original_CountryID AND [Name] = @original_Name AND [CountryNotes] = @original_CountryNotes"> 
       <DeleteParameters> 
        <asp:Parameter Name="original_CountryID" Type="Int32" /> 
        <asp:Parameter Name="original_Name" Type="String" /> 
        <asp:Parameter Name="original_CountryNotes" Type="String" /> 
       </DeleteParameters> 
       <InsertParameters> 
        <asp:Parameter Name="CountryID" Type="Int32" /> 
        <asp:Parameter Name="Name" Type="String" /> 
        <asp:Parameter Name="CountryNotes" Type="String" /> 
       </InsertParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="Name" Type="String" /> 
        <asp:Parameter Name="CountryNotes" Type="String" /> 
        <asp:Parameter Name="original_CountryID" Type="Int32" /> 
        <asp:Parameter Name="original_Name" Type="String" /> 
        <asp:Parameter Name="original_CountryNotes" Type="String" /> 
       </UpdateParameters> 
      </asp:SqlDataSource> 

     </div> 
    </form> 

ここで私はC#コード取り付けています:

public partial class Country : System.Web.UI.Page 
{ 



    SqlConnection con; 
    SqlCommand cmd; 
    public void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      GridView1.DataBind(); 
     } 

    } 





    protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (Button1.ToolTip == "Insert") 
     { 
      con = new SqlConnection("Data Source=RYI-SYS-004;Initial Catalog=ATS;Integrated Security=True"); 
      cmd = new SqlCommand("insert into Country1 (CountryID,Name,CountryNotes) values(@CountryID, @Name, @CountryNotes)", con); 

      cmd.Parameters.AddWithValue("@CountryID", Text1.Text); 
      cmd.Parameters.AddWithValue("@Name", Text2.Text); 
      cmd.Parameters.AddWithValue("@CountryNotes", Text3.Text); 
      con.Open(); 
      cmd.ExecuteNonQuery(); 

      con.Close(); 


     } 
     else if (Button1.ToolTip == "Update") 
     { 
      int id = Convert.ToInt32(ViewState["CountryID"]); 
      update(id); 

     } 



    } 



    protected void Row_edit(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "EditRow") 
     { 
      int nRowIndex = Int32.Parse(e.CommandArgument.ToString()); 
      Int32 nCountryID = Convert.ToInt32(GridView1.DataKeys[nRowIndex].Value); 
      GridViewRow row = GridView1.Rows[nRowIndex]; 
      Text1.Text = row.Cells[0].Text; 
      Text2.Text = row.Cells[1].Text; 
      Text3.Text = row.Cells[2].Text; 
      Button1.ToolTip = "Update"; 
      Button1.Text = "Update"; 
      Button2.Visible = true; 
      int CountryID = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Values["CountryID"].ToString()); 
      ViewState["CountryId"] = CountryID.ToString(); 

     } 

     else if (e.CommandName == "DeleteRow") 
     { 
      int id = Int32.Parse(e.CommandArgument.ToString()); 
      GridView1.DeleteRow(id); 
     } 

    } 

    public void update(int id) 
    { 
     con = new SqlConnection("Data Source=RYI-SYS-004;Initial Catalog=ATS;Integrated Security=True"); 
     int CountryId = id; 
     string str = "update Country1 set Name='" + Text2.Text + "', CountryNotes='" + Text3.Text + "' where CountryID='" + Text1.Text + "'"; 
     cmd = new SqlCommand(str, con); 
     cmd.Parameters.AddWithValue("@Name", Text2.Text); 
     cmd.Parameters.AddWithValue("@CountryNotes", Text3.Text); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     GridView1.DataBind(); 

    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     Button1.Text = "Add"; 
     Button2.Visible = false; 
     Text1.Text = ""; 
     Text2.Text = ""; 
     Text3.Text = ""; 
    } 
+0

「ツールヒント」ではなくボタンの「CommandName」プロパティを使用してみてください。 'CommandName'が標準です。 –

答えて

0

を私は私はあなたが見ることを言って開始したいと思います新しいプログラマー。私の最初のアドバイスは、テキストボックスとボタンtextbox1 textbox2とButton1とButton2だけを呼び出すべきではないということです。これは初心者の仕事です。フロントエンドのTextBox IDエリアに、txtCountryIDやtxtCountryNameなどの意味のある名前を付けます。同様に、Button1はbtnAddと呼ばれ、Button2はbtnCancelと呼ばれる必要があります。したがって、バックエンド関数を個別に作成する必要があります。あなたが最初から正しくソフトウェアを設計し始めると、後で混乱や間違いを救うことができます。たとえそれがボタンとテキストボックスを意味のある名前を呼び出すような単純なものであっても。それはすべてのことについてはっきりと考えており、これがあなたがするのを助けるものです。

あなたの質問は明白ではありませんが、Button2_Clickで明示的にコードをクリアしたときに、テキストボックスがクリアされない理由を尋ねています。簡単な答えは、あなたはおそらくキャンセルボタンであると思われるButton2を押していないが、受け入れ可能なコーディング練習ではないButton2だけを呼び出しているということです。また、ボタン名を変更することは、不器用な練習です。ボタン名を変更するのではなく、ボタン名を同じにしておき、操作ごとにボタンを追加します。

1

HI Dhivyadevi Dhanapalは2つのことを追加してください:

  1. は明確で更新グリッドビューのためのメソッドを作成します。
public void clear() 
    { 
     Text1.Text = ""; 
     Text2.Text = ""; 
     Text3.Text = ""; 
     GridView1.DataBind(); 
    } 

2.コール[追加]ボタンでその方法。

protected void Button1_Click(object sender, EventArgs e) 
{ 

if (Button1.ToolTip == "Insert") 
     { 

      // con = your Connection String 

cmd = new SqlCommand("insert into Country1 (CountryID,Name,CountryNotes) values(@CountryID, @Name, @CountryNotes)", con); 

      cmd.Parameters.AddWithValue("@CountryID", Text1.Text); 

      cmd.Parameters.AddWithValue("@Name", Text2.Text); 

      cmd.Parameters.AddWithValue("@CountryNotes", Text3.Text); 

      con.Open(); 

      cmd.ExecuteNonQuery(); 

      con.Close(); 

     } 

     else if (Button1.ToolTip == "Update") 

     { 

      int id = Convert.ToInt32(ViewState["CountryID"]); 

      update(id); 



     } 


     clear(); 

    } 
+0

私はあなたが "クラス"ではなく "メソッド"を意味すると思います。 –

関連する問題