1

私は次のようなjs関数を持っています:

<script type="text/javascript">
       function Cols() {
           rows = document.getElementById("GridView1").rows;
           for (i = 0; i < rows.length; i++) {
               rows[i].cells[8].style.visibility = "visible";
               rows[i].cells[9].style.visibility = "visible";
               rows[i].cells[10].style.visibility = "visible";
               rows[i].cells[11].style.visibility = "visible";
               rows[i].cells[12].style.visibility = "visible";
               rows[i].cells[13].style.visibility = "visible";
               rows[i].cells[14].style.visibility = "visible";
           }
       }

</script>      

そして、OnClientClick イベントを含むこのボタン:

<asp:Button ID="Add_Button" runat="server" OnClick="Add_Button_Click" Text="Add New Record" OnClientClick="Cols()" />

私の関数のセルは、GridView のフッター行を表示するサーバー側の OnClick イベントに移動する前に、クライアント側で表示したい Gridview 列を参照し、フッター行は新しい行を挿入するために使用されます。

編集:これが私の元の問題です:ボタンをクリックすると、他の列が表示され、同じクリックイベントでフッター行が表示されます。ただし、イベントが発生した後、余分な列が表示されますが、ボタンをもう一度クリックするまでフッター行は表示されません。

ここに私のクリックイベントがあります:

protected void Add_Button_Click(object sender, EventArgs e)
    {
        if (GridView1.FooterRow.Visible == false)
            {

                GridView1.FooterRow.Visible = true;
                Add_Button.Text = "Cancel";
                Panel2.Visible = false;

            }
            else
            {
                GridView1.FooterRow.Visible = false;
                Add_Button.Text = "Add New Record";
                GridView1.Columns[10].Visible = false;
                GridView1.Columns[11].Visible = false;
                GridView1.Columns[12].Visible = false;
                GridView1.Columns[13].Visible = false;
                GridView1.Columns[14].Visible = false;
                GridView1.Columns[15].Visible = false;
                GridView1.Columns[16].Visible = false; 
            }

    }

ただし、ボタンをクリックすると、OnClick イベントが発生しますが、OnClientClick は発生しません。なぜこうなった?

4

3 に答える 3

0

ボタンのデフォルト アクション、つまりポストバックをキャンセルする必要があります。

これを次のように変更します ( return false の部分に注意してください)。

<asp:Button ID="Add_Button" runat="server" OnClick="Add_Button_Click" Text="Add New Record" OnClientClick="Cols(); return false;" />
于 2015-06-02T22:35:11.940 に答える
0

最も簡単なオプションは、クライアント側をまとめて取り除き、ボタンのクリックを次のように変更することです。

protected void Add_Button_Click(object sender, EventArgs e)
{
    if (Add_Button.Text != "Cancel") //Add Record
    {
        GridView1.FooterRow.Visible = true;
        Add_Button.Text = "Cancel";
        Panel2.Visible = false;
    }
    else //Cancel
    {
         GridView1.FooterRow.Visible = false;
         Add_Button.Text = "Add New Record";
         GridView1.Columns[10].Visible = false;
         GridView1.Columns[11].Visible = false;
         /*etc*/ 
    }
}

これは、より堅牢な別のサーバー側オプションです。

protected void Add_Button_Click(object sender, EventArgs e)
{
    bool visibility = false;
    string buttonText = string.empty;
    if (Add_Button.Text != "Cancel") //Add Record
    {
        visibility = true;
        buttonText = "Cancel";
        Panel2.Visible = false;
    }
    else //Cancel
    {
        visibility = false;
        buttonText = "Add New Record";
    }

    Add_Button.Text = buttonText;
    ridView1.FooterRow.Visible = visibility;
    GridView1.Columns[10].Visible = visibility;
    GridView1.Columns[11].Visible = visibility;
    /*etc*/ 
}

クライアント側で何かが発生した直後にポストバックが発生しても、実際には何も得られません。

他のオプションは、すべてクライアント側で行うことです。Grdiveiwカスタマイズした回答を提供できるほどあなたのことをよく知っているわけではありませんが、あなたがしなければならないことの基本は次のとおりです。

  • グリッドが生成されたら、非表示にする列セルに CSS クラスを追加し、フッター行にdisplay:none
  • javascript を使用してクラスを削除し、非表示の要素を表示してボタンのテキストを変更します。

グリッドの列数が固定されている場合は、巧妙な CSS を使用して、サーバー側で何もせずにフッターと列を非表示にすることさえできます。

于 2015-06-03T01:04:56.777 に答える
0

OnClientClickイベントが発生していないことを示すものは何ですか? 私が知る限り、それは発生していますが、その直後にサーバーにポストバックしてOnClick、サーバー上でイベントを実行します。

Cols()したがって、関数が実行されていることはわかりません。

Cols()この方法で関数を終了してみてください:

return false; // prevent the OnClick event from being fired

このようにして、OnClientClickイベントではなくイベントのみが発生しOnClickます。明らかに、現時点で両方を維持することは意味がありません。両方が意味を持つ唯一のケースは、次のような JS 関数です。

return confirm("Are you sure to execute OnClick?");

ユーザーが「いいえ」を選択すると、ページにとどまり、それ以外の場合はポストバックが発生します。

于 2015-06-02T22:37:31.493 に答える