0

我尝试在 aspx 中编写数据网格。在我的数据库中有一个名为“PROJECT_NAME”的列。我想要这些列在我的数据网格中,然后我添加第二列(编辑框)来为每个项目添加值。这一切都在网格视图中,我在表单中添加了按钮。当我按下按钮时,我如何了解哪些列值属于哪个项目?

我的意思是,例如

  1. 行值:A 项目 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" />

默认.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

我之前使用的一种解决方案利用了按钮的 CommandArgument 属性。您可以设置 CommandArgument='<% Eval("ColumnValueYouWant") %>' 并且每个按钮都将获取其所在行中列的值。然后,在单击事件中,您可以将对象发送方解析回 Button 并访问 CommandArgument 值。

于 2012-11-10T15:54:28.757 回答