最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

how to get the DataKey value in gridview using jquery or javascript? PLEASE READ THE CODE AS WELL BEFORE ANSWER - Stack Overflow

programmeradmin8浏览0评论

I have a gridview and i am adding two buttons "Edit and Delete" dynamically(by code). Here is my HTML Code:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CellPadding="4"
                BorderWidth="1px" ForeColor="#333333" GridLines="None">
                <AlternatingRowStyle BackColor="White" />
                <FooterStyle BackColor="#990000" ForeColor="White" Font-Bold="True" />
                <HeaderStyle Height="30px" BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <PagerStyle ForeColor="#333333" HorizontalAlign="Center" BackColor="#E2E2E2" />
                <RowStyle CssClass="test" BackColor="#E2E2E2" Height="25px" BorderWidth="1px" ForeColor="#333333" />
                <SelectedRowStyle BackColor="#E2E2E2" Font-Bold="True" ForeColor="Navy" />
                <SortedAscendingCellStyle BackColor="#FDF5AC" />
                <SortedAscendingHeaderStyle BackColor="#4D0000" />
                <SortedDescendingCellStyle BackColor="#FCF6C0" />
                <SortedDescendingHeaderStyle BackColor="#820000" />
            </asp:GridView>

Here is my Code Behind Code ::

 private void BindData(DataTable dtColumns)
{
    GridView1.Columns.Clear();
    String Query = "";
    DataTable dtSearchItems = (DataTable)ViewState["dtSearchItems"];
    String PrimaryKey = "";
    if (ViewState["PrimaryKey"] != null)
    {
        PrimaryKey = ViewState["PrimaryKey"].ToString();
    }
    if (dtColumns != null)
    {
        String Columns = "";
        if (dtColumns.Rows.Count > 0)
        {
            foreach (DataRow dr in dtColumns.Rows)
            {
                Columns += dr["OrignalColumn"].ToString() + ",";
            }
            Columns = Columns.TrimEnd(',');
            Query = "Select " + PrimaryKey + " , " + Columns + " from " + TableName + " where 1 = 1 ";
        }
        else
        {
            Query = "Select *," + PrimaryKey + " from " + TableName + " where 1 = 1 ";
        }
    }
    else
    {
        Query = "Select *," + PrimaryKey + " from " + TableName + " where 1 = 1 ";
    }
    if (dtSearchItems != null)
    {
        if (dtSearchItems.Rows.Count > 0)
        {
            foreach (DataRow dr in dtSearchItems.Rows)
            {
                Query += " " + dr["AndOr"].ToString() + " " + dr["ColumnName"].ToString() + " " + ClsStaticSearch.ReturnOperationSymbol(dr["Operation"].ToString(), dr["Value"].ToString());
            }
        }
        else
        {
            Query = Query;
        }
    }

    DataTable dtOutPutResult = new DataTable();
    SqlConnection con = new SqlConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
    SqlCommand cmd = new SqlCommand(Query, con);

    if (con.State == ConnectionState.Closed) con.Open();
    dtOutPutResult.Load(cmd.ExecuteReader());
    GridView1.DataKeyNames = new string[] { PrimaryKey };

    if (dtOutPutResult.Rows.Count > 0)
    {
        foreach (DataColumn dcDtOutPutResult in dtOutPutResult.Columns)
        {
            foreach (DataRow drDtColumns in dtColumns.Rows)
            {
                if (drDtColumns["OrignalColumn"].ToString() == dcDtOutPutResult.ColumnName)
                {
                    BoundField bfield = new BoundField();
                    bfield.DataField = dcDtOutPutResult.ColumnName;
                    bfield.HeaderText = drDtColumns["DisplayColumn"].ToString();
                    GridView1.Columns.Add(bfield);
                }
            }
        }

        TemplateField t = new TemplateField();
        DynamicTemplate mt = new DynamicTemplate(ListItemType.Item);

        Button btnEdit = new Button();
        btnEdit.ID = "btnEdit";
        btnEdit.Visible = true;
        btnEdit.OnClientClick = "return confirm_Edit();";
        btnEdit.Text = " Submit";
        btnEdit.CssClass = "button";
        btnEdit.Style.Add("margin-right", "5px");
        mt.AddControl(btnEdit, "Text", "Edit");

        Button btnDelete = new Button();
        btnDelete.ID = "btnDelete";
        btnDelete.OnClientClick = "return confirm_delete();";
        btnDelete.Visible = true;
        btnDelete.Text = " Submit";
        btnDelete.CssClass = "button";
        mt.AddControl(btnDelete, "Text", "Delete");

        t.ItemTemplate = mt;
        t.HeaderText = "Activity";
        GridView1.Columns.Add(t);
        GridView1.DataSource = dtOutPutResult;
        GridView1.DataBind();
        lblMessage.Visible = false;
    }
    else
    {
        GridView1.DataSource = dtOutPutResult;
        GridView1.DataBind();
        lblMessage.Visible = true;
        lblMessage.Style.Add("Color", "Red");
        lblMessage.Text = "No Record Found.";
    }
    cmd.Dispose();
}

What i want to do is::

I want to create a generic module for advanced search, that is almost plete, now what i want to do it it is: i want to add edit and delete functionality to grid also. for that i need to get DataKey Value of the grid for each button's click only by javascript or jquery because the buttons will not be visible if the page is being post back.

Please help me.

I have a gridview and i am adding two buttons "Edit and Delete" dynamically(by code). Here is my HTML Code:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CellPadding="4"
                BorderWidth="1px" ForeColor="#333333" GridLines="None">
                <AlternatingRowStyle BackColor="White" />
                <FooterStyle BackColor="#990000" ForeColor="White" Font-Bold="True" />
                <HeaderStyle Height="30px" BackColor="#990000" Font-Bold="True" ForeColor="White" />
                <PagerStyle ForeColor="#333333" HorizontalAlign="Center" BackColor="#E2E2E2" />
                <RowStyle CssClass="test" BackColor="#E2E2E2" Height="25px" BorderWidth="1px" ForeColor="#333333" />
                <SelectedRowStyle BackColor="#E2E2E2" Font-Bold="True" ForeColor="Navy" />
                <SortedAscendingCellStyle BackColor="#FDF5AC" />
                <SortedAscendingHeaderStyle BackColor="#4D0000" />
                <SortedDescendingCellStyle BackColor="#FCF6C0" />
                <SortedDescendingHeaderStyle BackColor="#820000" />
            </asp:GridView>

Here is my Code Behind Code ::

 private void BindData(DataTable dtColumns)
{
    GridView1.Columns.Clear();
    String Query = "";
    DataTable dtSearchItems = (DataTable)ViewState["dtSearchItems"];
    String PrimaryKey = "";
    if (ViewState["PrimaryKey"] != null)
    {
        PrimaryKey = ViewState["PrimaryKey"].ToString();
    }
    if (dtColumns != null)
    {
        String Columns = "";
        if (dtColumns.Rows.Count > 0)
        {
            foreach (DataRow dr in dtColumns.Rows)
            {
                Columns += dr["OrignalColumn"].ToString() + ",";
            }
            Columns = Columns.TrimEnd(',');
            Query = "Select " + PrimaryKey + " , " + Columns + " from " + TableName + " where 1 = 1 ";
        }
        else
        {
            Query = "Select *," + PrimaryKey + " from " + TableName + " where 1 = 1 ";
        }
    }
    else
    {
        Query = "Select *," + PrimaryKey + " from " + TableName + " where 1 = 1 ";
    }
    if (dtSearchItems != null)
    {
        if (dtSearchItems.Rows.Count > 0)
        {
            foreach (DataRow dr in dtSearchItems.Rows)
            {
                Query += " " + dr["AndOr"].ToString() + " " + dr["ColumnName"].ToString() + " " + ClsStaticSearch.ReturnOperationSymbol(dr["Operation"].ToString(), dr["Value"].ToString());
            }
        }
        else
        {
            Query = Query;
        }
    }

    DataTable dtOutPutResult = new DataTable();
    SqlConnection con = new SqlConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
    SqlCommand cmd = new SqlCommand(Query, con);

    if (con.State == ConnectionState.Closed) con.Open();
    dtOutPutResult.Load(cmd.ExecuteReader());
    GridView1.DataKeyNames = new string[] { PrimaryKey };

    if (dtOutPutResult.Rows.Count > 0)
    {
        foreach (DataColumn dcDtOutPutResult in dtOutPutResult.Columns)
        {
            foreach (DataRow drDtColumns in dtColumns.Rows)
            {
                if (drDtColumns["OrignalColumn"].ToString() == dcDtOutPutResult.ColumnName)
                {
                    BoundField bfield = new BoundField();
                    bfield.DataField = dcDtOutPutResult.ColumnName;
                    bfield.HeaderText = drDtColumns["DisplayColumn"].ToString();
                    GridView1.Columns.Add(bfield);
                }
            }
        }

        TemplateField t = new TemplateField();
        DynamicTemplate mt = new DynamicTemplate(ListItemType.Item);

        Button btnEdit = new Button();
        btnEdit.ID = "btnEdit";
        btnEdit.Visible = true;
        btnEdit.OnClientClick = "return confirm_Edit();";
        btnEdit.Text = " Submit";
        btnEdit.CssClass = "button";
        btnEdit.Style.Add("margin-right", "5px");
        mt.AddControl(btnEdit, "Text", "Edit");

        Button btnDelete = new Button();
        btnDelete.ID = "btnDelete";
        btnDelete.OnClientClick = "return confirm_delete();";
        btnDelete.Visible = true;
        btnDelete.Text = " Submit";
        btnDelete.CssClass = "button";
        mt.AddControl(btnDelete, "Text", "Delete");

        t.ItemTemplate = mt;
        t.HeaderText = "Activity";
        GridView1.Columns.Add(t);
        GridView1.DataSource = dtOutPutResult;
        GridView1.DataBind();
        lblMessage.Visible = false;
    }
    else
    {
        GridView1.DataSource = dtOutPutResult;
        GridView1.DataBind();
        lblMessage.Visible = true;
        lblMessage.Style.Add("Color", "Red");
        lblMessage.Text = "No Record Found.";
    }
    cmd.Dispose();
}

What i want to do is::

I want to create a generic module for advanced search, that is almost plete, now what i want to do it it is: i want to add edit and delete functionality to grid also. for that i need to get DataKey Value of the grid for each button's click only by javascript or jquery because the buttons will not be visible if the page is being post back.

Please help me.

Share Improve this question edited Mar 19, 2013 at 10:10 Ram Singh asked Mar 19, 2013 at 7:35 Ram SinghRam Singh 6,93835 gold badges107 silver badges170 bronze badges 0
Add a ment  | 

1 Answer 1

Reset to default 5

using hiddenfield to fetch value is very mon solution for this scenario

<asp:TemplateField>
   <ItemTemplate>
     <asp:HiddenField ID="key" runat="server" Value='<%#Eval("ID") %>' />
   </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
  <ItemTemplate>
    <a href="#" id="getID">Read data key</a>
  </ItemTemplate>
</asp:TemplateField>

Script

<script type="text/javascript">
    $(document).ready(function() {
        $("table[id*=gridviewid] a[id*=getID]").click(function() {
            alert($(this).closest("tr").find("input[type=hidden][id*=key]").val());
        });
    });
</script>

If you find this tedious, you can find similar questions and solutions below:

With Jquery

On mouse over

Code project article

Fetching selected row datakey - stackoverflow

发布评论

评论列表(0)

  1. 暂无评论