0

dataTable情報をgridviewにバインドするためのgirdivewとSQLDataSourceがあります。

Row UPDATING EVENT で現在編集中の行の特定の列の値を取得するにはどうすればよいですか。(dataTable から)。

ありがとうございました 、

4

2 に答える 2

0

何を試しましたか?特定の列からのみデータを取得しようとしていますか? または行全体を表す特定の ID? 後者の場合は、次のことができます。

 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    int ID = Convert.ToInt16(GridView1.SelectedDataKey.Value);

}

次のように、グリッドビューでデータ キー名を指定する必要があります。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="id" DataSourceID="SqlDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged">

ユーザーがコメントした後に編集:

特定の列から特定の値が必要な場合は、これを実行できます。

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="handler" 
        AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
        DataKeyNames="id"  OnRowCommand="RowCommandHandler">

グリッドビューに onRowCommand を追加してから、分離コードで:

 protected void RowCommandHandler(Object sender, GridViewCommandEventArgs e)
 {
  int index = Convert.ToInt32(e.CommandArgument);
  GridViewRow row = GridView1.Rows[index];
   int k = row.RowIndex;
   string text = row.Cells[1].Text;
 }  

選択された行のインデックスを取得し、そのインデックスを取得して GridView1.Rows に渡すと、選択された行が得られ、必要な列からデータを取得できます。

 string text = row.Cells[1].Text;

テキストが必要な列が 4 番目の場合は、Cells[1] を Cells[4] などに変更するだけです。

于 2012-05-01T13:30:03.197 に答える
0

以下の例では、データをグリッドに表示し、ユーザーがコメントを非同期的にアクティブ化または非アクティブ化できるようにしています。これを非同期的にアクティブにするためにUPDATE PANELを使用しています。

これを実現するには、rowDataBound イベントと RowCommand イベントの両方を使用する必要があります。

このようにして、行のIDを取得し、編集、削除、またはこの例で行っているようなことを行でやりたいことを何でも実行できます。私は1つの列を更新しています

    <asp:GridView ID="gvSHowMostViewedArticles"  runat="server" AllowPaging="True" 
         AutoGenerateColumns="False"  Width="920px" BackColor="White" 
         BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
         Font-Names="Verdana" Font-Size="X-Small" ForeColor="Black" 
         GridLines="Horizontal" PageSize="10"   onrowdatabound="gvSHowMostViewedArticles_RowDataBound" 
onrowcommand="gvSHowMostViewedArticles_RowCommand" onpageindexchanging="gvSHowMostViewedArticles_PageIndexChanging">

         <Columns>
          <asp:TemplateField HeaderText="Sno">
                <ItemTemplate>
                  <%# Container.DataItemIndex + 1 %>
               </ItemTemplate>
          </asp:TemplateField>
   <asp:BoundField DataField="ArticleTitle" HeaderText="Article Title" />
   <asp:BoundField DataField="FullName" HeaderText="Name" />
   <asp:BoundField DataField="Country" HeaderText="Country" />

<asp:TemplateField HeaderText="Message">
       <ItemTemplate>
           <asp:LinkButton ID="lnkBtnShowMessage" runat="server" Text="Read" CommandName="showMessage" CommandArgument='<%# Eval("ID") %>' />
                                                </ItemTemplate>
                                         </asp:TemplateField>
                                        <asp:TemplateField HeaderText="Activate">
                                                <ItemTemplate>
                                                    <asp:LinkButton ID="lnkBtnActivateComment" runat="server" Text="Activate" CommandName="ActivateComment" CommandArgument='<%# Eval("ID") %>' />
                                                </ItemTemplate>
                                         </asp:TemplateField>
                                        <asp:TemplateField HeaderText="De Activate">
                                                <ItemTemplate>
                                                    <asp:LinkButton ID="lnkBtnDeActivateComment" runat="server" Text="De-Activate" CommandName="DeActivateComment" CommandArgument='<%# Eval("ID") %>' />
                                                </ItemTemplate>
                                         </asp:TemplateField>

        protected void gvSHowMostViewedArticles_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //Show Message
            LinkButton lb = e.Row.FindControl("lnkBtnShowMessage") as LinkButton;
            if (lb != null)
                ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lb);


            //Activate
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton lbActivate = e.Row.FindControl("lnkBtnActivateComment") as LinkButton;
                if (lbActivate != null)
                    ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lbActivate);

                lbActivate.Attributes.Add("onclick", "javascript:return " +
                "confirm('Are you sure you want to Activate this comment " +
                DataBinder.Eval(e.Row.DataItem, "ID") + "')");
            }
            //De Activate
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                LinkButton lbActivate = e.Row.FindControl("lnkBtnDeActivateComment") as LinkButton;
                if (lbActivate != null)
                    ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lbActivate);

                lbActivate.Attributes.Add("onclick", "javascript:return " +
                "confirm('Are you sure you want to De-Activate this comment " +
                DataBinder.Eval(e.Row.DataItem, "ID") + "')");
            }
        }


      protected void gvSHowMostViewedArticles_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //Show Message
            if (e.CommandName == "showMessage")
            {
                int sno = Convert.ToInt32(e.CommandArgument);
                string strSql = "SELECT * FROM Comments WHERE comID = " + sno;
                DataSet ds = DataProvider.Connect_Select(strSql);
                lblCommentMessage.Text = ds.Tables[0].Rows[0]["comMessage"].ToString();
            }

            // Activate Comment
            if (e.CommandName == "ActivateComment")
            {
                int sno = Convert.ToInt32(e.CommandArgument);
                String strSql = "UPDATE Comments SET Visible = 1 WHERE ID = " + sno;
                DataProvider.Connect_Select(strSql);
                lblCommentMessage.Text = "Activated";
            }

            // De Activate Comment
            if (e.CommandName == "DeActivateComment")
            {
                int sno = Convert.ToInt32(e.CommandArgument);
                String strSql = "UPDATE Comments SET Visible = 0 WHERE ID = " + sno;
                DataProvider.Connect_Select(strSql);

                lblCommentMessage.Text = "Deactivate";

            }
        }
于 2012-05-01T13:41:05.250 に答える