小弟问个问题,gridview 中我没有编辑按扭,我想实现这样的功能
当我点击普通button按扭的时候,gridview 能自动处于编辑状态,并且不显示编辑按扭出来
需要怎么做,高手解答

解决方案 »

  1.   

    如下代码演示如果单击或者双击一列改变为编辑行: C# codepublic partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GridView1.DataSource = BuildGridViewDataSource();
                GridView1.DataBind();
            }        SetGridViewEditRow();
        }    private void SetGridViewEditRow()
        {
            if (H_EditRowIndex.Value != "")
            {
                int editIndex = Convert.ToInt32(H_EditRowIndex.Value);
                GridView1.EditIndex = editIndex;
                GridView1.DataSource = BuildGridViewDataSource();
                GridView1.DataBind();
            }
            
        }
        /// <summary>
        /// 用来做例子中的数据源
        /// </summary>
        /// <returns></returns>
        private DataTable BuildGridViewDataSource()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Number");
            dt.Columns.Add("Name");        DataRow dr = dt.NewRow();
            dr["Number"] = "1000";
            dr["Name"] = "张三";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr["Number"] = "1001";
            dr["Name"] = "李四";
            dt.Rows.Add(dr);        return dt;
        }    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //实现单击时确发编辑
                //e.Row.Attributes.Add("onclick", "OnClickedRow('" + e.Row.RowIndex + "');");
                //实现双击时确发编辑
                e.Row.Attributes.Add("ondblclick", "OnClickedRow('" + e.Row.RowIndex + "');");
            }
        }
    }HTML code<body>
        <form id="form1" runat="server">
            <div>
                <asp:GridView Width="500" ID="GridView1" runat="server" AutoGenerateColumns="False"
                    OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:BoundField DataField="Number" HeaderText="编号" />
                        <asp:BoundField DataField="Name" HeaderText="姓名" />
                    </Columns>
                </asp:GridView>
                <input id="H_EditRowIndex" type="hidden" runat="server" />
            </div>
        </form>
    </body>
    </html>
    JScript code <script type="text/javascript">
        function OnClickedRow(rowIndex)
        {
            document.getElementById("H_EditRowIndex").value = rowIndex;
            form1.submit();
        }
        </script>
      

  2.   

    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GridView1.DataSource = BuildGridViewDataSource();
                GridView1.DataBind();
            }        SetGridViewEditRow();
        }    private void SetGridViewEditRow()
        {
            if (H_EditRowIndex.Value != "")
            {
                int editIndex = Convert.ToInt32(H_EditRowIndex.Value);
                GridView1.EditIndex = editIndex; 
                H_EditRowIndex.Value=""; 
                GridView1.DataSource = BuildGridViewDataSource();
                GridView1.DataBind();
            }
            
        }
        /// <summary>
        /// 用来做例子中的数据源
        /// </summary>
        /// <returns></returns>
        private DataTable BuildGridViewDataSource()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Number");
            dt.Columns.Add("Name");        DataRow dr = dt.NewRow();
            dr["Number"] = "1000";
            dr["Name"] = "张三";
            dt.Rows.Add(dr);        dr = dt.NewRow();
            dr["Number"] = "1001";
            dr["Name"] = "李四";
            dt.Rows.Add(dr);        return dt;
        }    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //实现单击时确发编辑
                //e.Row.Attributes.Add("onclick", "OnClickedRow('" + e.Row.RowIndex + "');");
                //实现双击时确发编辑
                e.Row.Attributes.Add("ondblclick", "OnClickedRow('" + e.Row.RowIndex + "');");
            }
        }
    }HTML code<body>
        <form id="form1" runat="server">
            <div>
                <asp:GridView Width="500" ID="GridView1" runat="server" AutoGenerateColumns="False"
                    OnRowDataBound="GridView1_RowDataBound">
                    <Columns>
                        <asp:BoundField DataField="Number" HeaderText="编号" />
                        <asp:BoundField DataField="Name" HeaderText="姓名" />
                    </Columns>
                </asp:GridView>
                <input id="H_EditRowIndex" type="hidden" runat="server" />
            </div>
        </form>
    </body>
    </html>
    JScript code <script type="text/javascript">
        function OnClickedRow(rowIndex)
        {
            document.getElementById("H_EditRowIndex").value = rowIndex;
            form1.submit();
        }
        </script>参照前辈的,双击某行,某行自动变成编辑状态.
      

  3.   

    总结一楼的方法关键的就是
    在RowDataBound的事件中
             if (e.Row.RowType == DataControlRowType.DataRow) 
            { 
                //实现单击时确发编辑 
                //e.Row.Attributes.Add("onclick", "OnClickedRow('" + e.Row.RowIndex + "');"); 
                //实现双击时确发编辑 
                e.Row.Attributes.Add("ondblclick", "OnClickedRow('" + e.Row.RowIndex + "');"); 
            } 调用前台javascript
        function OnClickedRow(rowIndex) 
        { 
            document.getElementById("H_EditRowIndex").value = rowIndex; //将行索引值放入隐藏的TextBox中
            form1.submit(); 
        } 
         </script> submit后又进入一此Page_load事件中
                  GridView1.EditIndex = editIndex;  //设置GridView双击、单击的某行变为编辑状态
                H_EditRowIndex.Value="";  //清空隐藏TextBox中的值,为下一次单击做准备
                GridView1.DataSource = BuildGridViewDataSource(); //绑定GridView
                GridView1.DataBind();