0

aspxでデータグリッドを書き込もうとしています。私のデータベースには、「PROJECT_NAME」という名前の列があります。これらの列をデータ グリッドに入れたいので、2 番目の列 (編集ボックス) を追加して、各プロジェクトごとに値を追加します。これはすべてグリッド ビューであり、フォームにボタンを追加します。ボタンを押すと、どの列の値がどのプロジェクトに属しているかをどのように理解できますか?

つまり、たとえば

  1. 行の値: プロジェクト 2 列の値: 50
  2. 行の値: B プロジェクト 2 列の値: 60
  3. 行の値: C プロジェクト 2 列の値: 70

ボタン 1 を押すタイミングを知りたいです。プロジェクト値 50 どうすればこれを理解できますか?

これは私のaspxコードです:

     <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            .style1
            {
                width: 78px;
            }
            .style2
            {
            width: 426px;
        }
    </style>
</head>


<body>
    <form id="form1" runat="server">
    <div style="height: 561px">

        <table style="width: 100%; height: 556px;">
            <tr>
                <td>
                    &nbsp;</td>
                <td>

                    <table style="width:100%;">
                        <tr>
                            <td class="style1">
                                Ay</td>
                            <td>
                                <asp:TextBox ID="ay" runat="server"></asp:TextBox>
                            </td>
                            <td>
                                &nbsp;</td>
                        </tr>
                        <tr>
                            <td class="style1">
                                Yıl</td>
                            <td>
                                <asp:TextBox ID="yil" runat="server"></asp:TextBox>
                            </td>
                            <td>
                                &nbsp;</td>
                        </tr>
                        <tr>
                            <td class="style1">
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                        </tr>
                    </table>
                </td>

                <td>
                    &nbsp;</td>
            </tr>
            <tr>
                <td>
                    &nbsp;</td>
                <td>
                   <asp:GridView ID="portföy" runat="server" 
                    CellPadding="3" GridLines="Horizontal" 
                    AutoGenerateColumns="False"      
                    DataKeyNames="PRJ_PROJECT_NAME" BackColor="White" BorderColor="#E7E7FF" 
                    BorderStyle="None" BorderWidth="1px" Font-Bold="False" Font-Names="Verdana" 
                    Font-Overline="False" Font-Size="Smaller" Width="1000px"  
                    >
                    <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
            <Columns> 
            <asp:TemplateField HeaderText="PRJ_PROJECT_NAME"  HeaderStyle-HorizontalAlign="Left"> 

                <ItemTemplate> 
                    <asp:Label ID="lblProjeTT" runat="server" Text='<%# Bind("PRJ_PROJECT_NAME") %>'></asp:Label> 
                </ItemTemplate> 
                <HeaderStyle HorizontalAlign="Left"></HeaderStyle>
            </asp:TemplateField> 

            <asp:TemplateField HeaderText="Miktar (a/g)" HeaderStyle-HorizontalAlign="Center"> 

                <ItemTemplate> 
               <asp:TextBox runat="server" id="txtField1" Text='<%# Bind("TAMAMLANMA_YUZDESI") %>'/>
                </ItemTemplate>  
                <EditItemTemplate>
                 <asp:TextBox runat="server" id="txtField1" Text='<%# Bind("TAMAMLANMA_YUZDESI") %>'/>
                </EditItemTemplate>

                <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
            </asp:TemplateField>             
            <asp:TemplateField HeaderText="" ShowHeader="False" HeaderStyle-HorizontalAlign="Center"> 

                <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
            </asp:TemplateField> 
        </Columns> 
                    <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
                    <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
                    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
                    <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                    <EditRowStyle BackColor="#FFFFA8" ForeColor="Black" />
                    <AlternatingRowStyle BackColor="#F7F7F7" />
                </asp:GridView>

                    <table style="width:100%;">
                        <tr>
                            <td class="style2">
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                        </tr>
                        <tr>
                            <td class="style2">
                                &nbsp;</td>
                            <td>
                                <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" 
                                    Width="149px" />
                            </td>
                            <td>
                                &nbsp;</td>
                        </tr>
                        <tr>
                            <td class="style2">
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                            <td>
                                &nbsp;</td>
                        </tr>
                    </table>

                </td>
                <td>
                    &nbsp;</td>
            </tr>
            <tr>
                <td>
                    &nbsp;</td>
                <td>
                    &nbsp;</td>
                <td>
                    &nbsp;</td>
            </tr>
        </table>

    </div>
    </form>
</body>
</html>

これは私のコードです:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Data;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    csOra cOra;
    string oraTns = ConfigurationManager.AppSettings["TNS"];
    string oraUserName = ConfigurationManager.AppSettings["OraUserName"];
    string oraPassword = ConfigurationManager.AppSettings["OraPassword"];

    protected void Page_Load(object sender, EventArgs e)

    {

          cOra = new csOra(oraTns, oraUserName, oraPassword);
        if (cOra.OraCnn.State != ConnectionState.Open)
        {
            MessageBox.Show("Oracle ile bağlantı kurulamadı...");
            return;
        }
        try
        {
            if (!IsPostBack)
            { 

                setGrid();
            }

        }
        catch (OleDbException ex)
        {
            Response.Write(@"Oracle Error:" + ex.Message);
            return;
        }
        catch (Exception ex)
        {
            Response.Write(@"Error:" + ex.Message);
            return;
        }

    }

    void setGrid()
    {
        string sSQL = @"SELECT PRJ_PROJECT_NAME,TAMAMLANMA_YUZDESI
                        FROM  PPIGANTT.KOKTEYL_TABLE_3
                        WHERE PRJ_PROJECT_NAME like '%d%' 
                        ORDER BY Request_id";
        try
        {
            OleDbDataAdapter oDa = new OleDbDataAdapter(sSQL, cOra.OraCnn);
            DataTable portföy_ = new DataTable("KOKTEYL_TABLE_3");
            oDa.Fill(portföy_);

            if (portföy_.Rows.Count > 0)
            {
                portföy.DataSource = portföy_;
                portföy.DataBind();
            }
            else
            {
                portföy_.Rows.Add(portföy_.NewRow());
                portföy.DataSource = portföy_;
                portföy.DataBind();

                int TotalColumns = portföy.Rows[0].Cells.Count;
                portföy.Rows[0].Cells.Clear();
                portföy.Rows[0].Cells.Add(new TableCell());
                portföy.Rows[0].Cells[0].ColumnSpan = TotalColumns;
                portföy.Rows[0].Cells[0].Text = "No Record Found";
            }
        }
        catch (OleDbException ex)
        {
            Response.Write(@"Oracle Error:" + ex.Message);
            return;
        }
        catch (Exception ex)
        {
            Response.Write(@"Error:" + ex.Message);
            return;
        }
    }
    void UpdatePortföy(string Portföy, int bütçe    )
    {
        string sSQL = @"BEGIN UPDATE PPIGANTT.KOKTEYL_TABLE_3
                           SET TAMAMLANMA_YUZDESI = " + bütçe + @"WHERE PRJ_PROJECT_NAME ='"
                                         + Portföy + @"' ; COMMIT; END;";
        string sErr = "";
        try
        {
            cOra.ExecNonQuery(sSQL, out sErr);
        }
        //setGrid();
        catch (OleDbException ex)
        {
            Response.Write(@"Oracle Error:" + ex.Message);
            return;
        }
        catch (Exception ex)
        {
            Response.Write(@"Error:" + ex.Message);
            return;
        }
    }



    protected void Button1_Click(object sender, EventArgs e)
    {
       /*  what can I write here to understand whic column value ?*/
    } 
}

ありがとう。

4

2 に答える 2

1

Button1_Click の内部では、GridView のすべての行をループし、各行で FindControl を実行して、ラベルとテキスト ボックスを取得する必要があります。そこから、PRJ_PROJECT_NAME とテキスト ボックスの値を特定できます。

次に例を示します。

デフォルト.aspx

<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="false">
  <Columns>
    <asp:TemplateField>
      <ItemTemplate>
        <asp:Label ID="lblLabel" runat="server" Text='<%# Bind("Number") %>' />
      </ItemTemplate>          
    </asp:TemplateField>
    <asp:TemplateField>
      <ItemTemplate>
        <asp:TextBox ID="txtData" runat="server" Text='<%# Bind("Value") %>' />
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit" />

Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    // Create some fake data and bind it to the gridview
    var data = new List<TheData>();

    foreach(var num in Enumerable.Range(1, 4))
    {
      var newData = new TheData();

      newData.Number = num.ToString();
      newData.Value = num;

      data.Add(newData);
    }

    gvData.DataSource = data;
    gvData.DataBind();
  }
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
  for (var index = 0; index < gvData.Rows.Count; ++index)
  {
    var row = gvData.Rows[index];
    var lblLabel = row.FindControl("lblLabel") as Label;
    var txtData = row.FindControl("txtData") as TextBox;

    //Here is where the values are grabbed, at this point you can do what you need to.
    var number = lblLabel.Text;
    var value = txtData.Text;
  }
}
于 2012-11-10T15:35:11.007 に答える
0

以前に使用した 1 つのソリューションは、ボタンの CommandArgument 属性を利用しています。CommandArgument='<% Eval("ColumnValueYouWant") %>' を設定すると、各ボタンはその行の列の値を取得します。次に、クリック イベントで、オブジェクトの送信者を解析してボタンに戻し、CommandArgument 値にアクセスできます。

于 2012-11-10T15:54:28.757 に答える