2011-09-16 10 views
1

GridViewの各行に編集と削除ボタンが付いた5列のgridViewがあります。特定の行を編集ボタンをクリックすると、残りの行の編集と削除ボタンを無効にします。GridViewの特定の行で編集ボタンをクリックしたときに、すべての行の編集ボタンを無効にします。

以下は、私のaspx

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowFooter="True" EnableModelValidation="True"   onrowdatabound="GridView1_RowDataBound" onrowcommand="GridView1_RowCommand" onrowdeleting="GridView1_RowDeleting" EditRowStyle-ForeColor="Aqua" onrowediting="GridView1_RowEditing" > 

<asp:TemplateField HeaderText="Item#" > 
<ItemTemplate> 
<asp:Label ID="Item#" runat="server" Text='Label' ></asp:Label> 
</ItemTemplate> 
    </asp:TemplateField> 

     .......... 

    <asp:TemplateField > 
<ItemTemplate> 
<asp:Button ID="btnEdit" runat="server" CausesValidation ="false" Font-Size="Smaller" CommandName="Edit" Text="Edit" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' Width="35px"/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField > 
<ItemTemplate> 
<asp:Button ID="btnDelete" runat="server" CssClass="GridButton" CausesValidation="False" CommandName="Delete" Font-Size="Smaller" Text="Delete" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' /> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
    if (e.CommandName == "Delete") 
      { 
       int x = Convert.ToInt32(e.CommandArgument.ToString()); 
       txtLineItemNumber.Text = (x + 1).ToString(); 
      } 
      else 
      { 

       int x = Convert.ToInt32(e.CommandArgument.ToString()); 
       foreach (GridViewRow row in GridView1.Rows) 
       { 
        if (row.RowIndex != x) 
        { 
         Button editButton = (Button)row.FindControl("btnEdit"); 
         editButton.Enabled = false; 
         Button deleteButton = (Button)row.FindControl("btnDelete"); 
         deleteButton.Enabled = false; 
        } 
        else 
        { 
         Button deleteButton = (Button)row.FindControl("btnDelete"); 
         deleteButton.Text = "Cancel"; 
         e.CommandName = "Cancel"; --- This is not possible...what should I do so that the Command Name is changed to Cancel and it does the cancel operation. 
        } 

       }     } 
     } 

それが働いて得るために私を助けてください ..... JavaScriptを使用することができ

答えて

1

あなたが取っているアプローチはうまくいくでしょう。しかし、あなたのマークアップCommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'で設定されているCommandArgumentは、ボタン自身への参照ではなく、ボタンが存在するGridView行のインデックスである。

RowCommandイベントのCommandArgumentからインデックスを取得し、そのような他の行のすべてのボタンを有効/無効:

void gridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    switch (e.CommandName.ToLower()) 
    { 
     case "edit": 
      { 
       int rowIndex = Convert.ToInt32(e.CommandArgument); 

       foreach (GridViewRow row in gridView1.Rows) 
       { 
        if (row.RowIndex != rowIndex) 
        { 
         Button editButton = (Button)row.FindControl("btnEdit"); 
         editButton.Enabled = false; 
         Button deleteButton = (Button)row.FindControl("btnDelete"); 
         deleteButton.Enabled = false; 
        } 
       } 
      }break; 
    } 
} 

編集を

はそうのようなRowEditingイベントハンドラに削除ボタンを変更するコードを移動してみてください(コメントに基づく):

void gridView1_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    gridView1.EditIndex = e.NewEditIndex; 

    DataBind(); 

    Button deleteButton = (Button)gridView1.Rows[e.NewEditIndex].FindControl("btnDelete"); 
    deleteButton.Text = "Cancel"; 
    deleteButton.CommandName = "Cancel"; 
} 

void gridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gridView1.EditIndex = -1; 

    DataBind(); 
} 

これが役に立ちます。

+0

kyokou。上記のコードを貼り付けました...編集ボタンがクリックされたときに、削除ボタンのテキストをキャンセルに変更したいと思います。ユーザーが[キャンセル]ボタンをクリックすると、編集操作をキャンセルします。私は何が欠けているか教えてください。 – Janet

関連する問題