Member 13952925 Ответов: 1

В gridview я хочу привязать данные к текстовому полю. Как мне это сделать? Любая помощь будет очень признательна.


У меня есть текстовое поле в моем GridView. Я хочу связать это текстовое поле с необходимыми данными. Как мне это сделать? Ниже приведены мои файлы aspx & aspx.vb.

aspx:

<asp:GridView ID="grdItems" runat="server"  Width="100%" AllowPaging="True" CellPadding="4" ForeColor="#333333" GridLines="Horizontal" AutoGenerateColumns="False">
     <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" Font-Size="X-Small" />
     <RowStyle BackColor="#EFF3FB" />
     <EditRowStyle BackColor="#2461BF" />
     <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
     <pagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" Font-Size="Small" />
     <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
     <AlternatingRowStyle BackColor="White" />
       <Columns>

      <asp:BoundField DataField="actionItemId" HeaderText="Item Id"  >
      <ItemStyle Font-Size="Small" VerticalAlign="Top" />
      <HeaderStyle Font-Bold="True" Font-Size="Small" HorizontalAlign="Left" Width="65px" />
      <FooterStyle Font-Size="X-Small" />
      </asp:BoundField>
                
      <asp:TemplateField HeaderText="Description" >
      <ItemStyle Font-Size="Small" VerticalAlign="Top" />
      <HeaderStyle Font-Size="Small" HorizontalAlign="Left" Width="265px"/>
      <ItemTemplate>
       
      </ItemTemplate>
      </asp:TemplateField>
     
      <asp:TemplateField HeaderText="Actions Taken">
      <ItemTemplate>
      <tr>
      <td colspan="1">
      <asp:TextBox runat="server" ID="actionsTB" TextMode="MultiLine"> </asp:TextBox>
      </td>
      </tr>
      </ItemTemplate>
      <ItemStyle Font-Size="Small" VerticalAlign="Top" />
      <HeaderStyle Font-Bold="True" Font-Size="Small" HorizontalAlign="Left" />
      </asp:TemplateField>
            
       </Columns>
         <pagerSettings Mode="NumericFirstLast" />
         </asp:GridView>


aspx.vb:(метод привязки для этого столбца)

Private Sub GetActionsTaken(ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs, ByVal curActionItemId As Int32)
       Dim flexdata As DataSet = Nothing
       flexdata = CType(Session("flexdata"), DataSet)
       Dim myRows() As DataRow
       Dim sbData As New System.Text.StringBuilder
       Dim dbhelper As New DbHelper

       myRows = flexdata.Tables(table.PastActivities).Select("actionitemid=" & curActionItemId)
       For Each myRow As DataRow In myRows
       sbData.Append("" & dbhelper.ConvertDrString(myRow.Item(colActivity.occurredOn)) & " - " & "" & dbhelper.ConvertDrString(myRow.Item(colActivity.personFullName)) & "<br>")
       sbData.Append(dbhelper.ConvertDrString(myRow.Item(colActivity.activity)) & "<br><br>")
       Next
       e.Row.Cells(gridCol.ActionsTaken).Text = sbData.ToString
       dbhelper = Nothing
     End Sub


Ранее данные передавались непосредственно в текст столбца, как показано выше в файле aspx.vb. Но теперь у меня есть текстовое поле в том же столбце, и я хочу связать те же данные с этим текстовым полем. Любая помощь будет очень признательна. Спасибо!

Что я уже пробовал:

Новичок в этом деле ASP.Net-да. Пытаюсь ее решить.

1 Ответов

Рейтинг:
4

Vincent Maverick Durano

Вот краткий пример. Это в C#, как я этого не делаю VB.NET к сожалению. Но это должно быть прямо вперед для вас, чтобы следовать и конвертировать. Я обновил код и добавил VB.NET эквивалент.

Aspx-файл (убрал стили для простоты):

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 

            onrowdatabound="GridView1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="Id" HeaderText="Id" />
            <asp:BoundField DataField="Field1" HeaderText="Field 1" />
            <asp:TemplateField>
                <ItemTemplate>
                    <tr>
                        <td colspan="3">
                            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
     </asp:GridView>


с фоновым кодом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebFormDemo
{
    public partial class Repeater : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e) {
            if (!IsPostBack) {
                BindGridView();
            }

        }

        private void BindGridView() {
            var data = GetSampleData();

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


        private List<Student> GetSampleData() {
            List<Student> students = new List<Student>();
            students.Add(new Student() { Id = 1, Field1 = "SomeText 1", Field2 = "SomeText 1" });
            students.Add(new Student() { Id = 2, Field1 = "SomeText 2", Field2 = "SomeText 2" });
            students.Add(new Student() { Id = 3, Field1 = "SomeText 3", Field2 = "SomeText 3" });

            return students;
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
            if (e.Row.RowType == DataControlRowType.DataRow) {
                //access first column
                int id = Convert.ToInt32(e.Row.Cells[0].Text);

                //access the TexBox
                TextBox tb = (TextBox)e.Row.FindControl("TextBox1");
                tb.Text = "Assign whatever value here";
            }
        }
    }

    public class Student
    {
        public int Id { get; set; }
        public string Field1 { get; set; }
        public string Field2 { get; set; }
    }
}


Ключ есть тот самый RowDataBound событие. Это событие срабатывает, когда сетка ограничена данными, поэтому это идеальное место для доступа к вашим данным. TextBox и присвоить ему значение.

Вот это самое VB.NET эквивалент с использованием a инструмент преобразования:

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace WebFormDemo
    Public Partial Class Repeater
        Inherits System.Web.UI.Page

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
            If Not IsPostBack Then
                BindGridView()
            End If
        End Sub

        Private Sub BindGridView()
            Dim data = GetSampleData()
            GridView1.DataSource = data
            GridView1.DataBind()
        End Sub

        Private Function GetSampleData() As List(Of Student)
            Dim students As List(Of Student) = New List(Of Student)()
            students.Add(New Student() With {
                .Id = 1,
                .Field1 = "SomeText 1",
                .Field2 = "SomeText 1"
            })
            students.Add(New Student() With {
                .Id = 2,
                .Field1 = "SomeText 2",
                .Field2 = "SomeText 2"
            })
            students.Add(New Student() With {
                .Id = 3,
                .Field1 = "SomeText 3",
                .Field2 = "SomeText 3"
            })
            Return students
        End Function

        Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
            If e.Row.RowType = DataControlRowType.DataRow Then
                Dim id As Integer = Convert.ToInt32(e.Row.Cells(0).Text)
                Dim tb As TextBox = CType(e.Row.FindControl("TextBox1"), TextBox)
                tb.Text = "Assign whatever value here"
            End If
        End Sub
    End Class

    Public Class Student
        Public Property Id As Integer
        Public Property Field1 As String
        Public Property Field2 As String
    End Class
End Namespace


Member 13952925

Это работает, Винсент. Большое вам спасибо за помощь. Я действительно ценю это. :)

Vincent Maverick Durano

Еще бы! рад быть полезным.

Member 13952925

И Винсент, я на самом деле отправляю данные из строкового конструктора в текстовое поле. Я делаю несколько предложений жирным шрифтом, курсивом и т. д., добавляя их в строковый конструктор, и я не вижу никакого полужирного или курсивного текста, когда этот текст отправляется в текстовое поле. И знаете почему?

Vincent Maverick Durano

TextBox отображает данные только в виде обычного текста. Вместо этого вам нужно использовать Литеральный элемент управления, чтобы сохранить формат.

Member 13952925

Изменил его на буквальный. Это сработало, Винсент. Огромное спасибо. Так рад встретить такого знающего парня, как ты. :)