2009-06-03 35 views
11

मैं एक string सरणी के लिए एक ASP.NET GridView नियंत्रण बाध्य करने के लिए कोशिश कर रहा हूँ और मैं निम्नलिखित आइटम प्राप्त करने के लिए एक ASP.NET GridView नियंत्रण बाइंडिंग:एक स्ट्रिंग सरणी

एक नाम साथ क्षेत्र या संपत्ति 'आइटम' चयनित डेटा स्रोत पर नहीं मिला था।

एएसपी की डेटाफिल्ड संपत्ति के लिए मुझे सही मूल्य क्या है: मेरे ग्रिड व्यू नियंत्रण में बाउंडफ़िल्ल्ड कॉलम का उपयोग करना चाहिए।

ASPX पेज

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Item" /> 
     <asp:CommandField ButtonType="Link" ShowSelectButton="true" SelectText="Click Me!" /> 
    </Columns> 
</asp:GridView> 

कोड के पीछे:: ​​यहाँ मेरी स्रोत कोड है

string[] MyArray = new string[1]; 
MyArray[0] = "My Value"; 
MyGridView.DataSource = MyArray; 
MyGridView.DataBind(); 

अद्यतन

मैं क्योंकि मैं करने की जरूरत है AutoGenerateColumns विशेषता false करने के लिए सेट की आवश्यकता है अतिरिक्त asp:CommandField कॉलम उत्पन्न करें। मैं अपने कोड नमूना अद्यतन किया है इस परिदृश्य को प्रतिबिंबित करने के

उत्तर

8

एक विधि है से उठा लिया एक एकल, नामित क्षेत्र। इस तरह, आप इसे एक नाम दे सकते हैं।

public class GridRecord 
{ 
    public string MyValue { get; set; } 
} 

फिर कक्षा की एक सूची के लिए अपने स्ट्रिंग सरणी परिवर्तित

string[] MyArray = new string[1]; 
MyArray[0] = "My Value"; 
List<GridRecord> MyList = (
    from ar in myArray 
    select new GridRecord 
    { 
     MyValue = ar 
    }).ToList(); 
MyGridView.DataSource = MyList; 
MyGridView.DataBind(); 

अब आप अपने DataField संपत्ति

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="MyValue" /> 
    </Columns> 
</asp:GridView> 
+0

धन्यवाद, मुझे LINQ का उपयोग करके यह समाधान पसंद है। –

+0

मैं यहां ऊपर जैसा कुछ उपयोग कैसे कर सकता हूं: http://stackoverflow.com/questions/34209825/how- टू-गठबंधन-एकाधिक-सूचियां-और-उपयोग-ए-ग्रिडव्यू-डेटासोर्स धन्यवाद। – Si8

12

तो जैसे एक TemplateField साथ BoundField के बजाय ऐसे: इसके साथ एक वर्ग पारित करने के लिए

<asp:TemplateField HeaderText="String Value"> 
     <ItemTemplate> 
      <%# Container.DataItem %> 
     </ItemTemplate> 
    </asp:TemplateField> 

BTW मैं another question

+0

धन्यवाद। किसी कारण से मैं कंटेनर को याद नहीं रख सकता। डेटाटाइम सिंटैक्स :( –

1

माइकल,

कोड

की लाइन नाम कर सकते हैं
<asp:BoundField DataField="Item" /> 

"आइटम" के नाम से एक कॉलम की अपेक्षा करता है, जो आपके पास होगा यदि आप डेटा स्रोत नियंत्रणों में से किसी एक के लिए बाध्यकारी थे जैसे कि SQLDataSource, ObjectDataSource, या LinqDataSource। चूंकि आप एक IENumerable के लिए बाध्यकारी हैं, आपके पास ऐसा कोई नाम नहीं है।

+0

धन्यवाद, अच्छा बिंदु! मैंने अब सही नाम का उपयोग करने के लिए कोड अपडेट किया है। –

20

खोज के घंटे के बाद, मैं अंत में पाया कि इस मामले के लिए एक विशेष DataField है कि: ""

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="false"> 
<Columns> 
    <asp:BoundField DataField="!" /> 
</Columns> 
</asp:GridView> 

मुझे आशा है कि यह किसी एक दिन यहाँ मदद करेंगे :)

+1

धन्यवाद, यह सहायक था। –

+0

हम्म, बस इसे एक चुनिंदा बॉक्स (ड्रॉप-डाउन) में आज़माया और यह काम नहीं किया :(मुझे आश्चर्य है कि यह ग्रिड व्यू के लिए विशिष्ट है। ऐसा लगता है कि यह डेटा बाध्यकारी की एक सामान्य सामान्य आवश्यकता है कि मैं वास्तव में हैरान हूं कि कोई नहीं है उचित उत्तर – Andy

+0

वाह। क्या आपके पास यह जानकारी है जहां आपको यह जानकारी मिली है? –

3

पुराने डेटाग्रिड का उपयोग कर एक पूरा उदाहरण है ... तो ऐसा लगता है कि "!" चाल व्यापक कार्यान्वयन है। यह वीएस -2008 में एएसपी.नेट के तहत काम किया। बेशक, ग्रिड व्यू का उपयोग करने के लिए बस सही तत्व नामों को प्रतिस्थापित करें।

<%@ Page 
    Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication2._Default" 
%> 
<%@Import 
    Namespace="System.Collections.Generic" 
%> 

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

    <script type="text/C#" runat="server"> 
     void initList() 
     {   
     List<String> myList = new List<String>(); 
     myList.Add("Hello"); 
     myList.Add("Chatting"); 
     myList.Add("Goodbye"); 
     Grid1.DataSource = myList; 
     Grid1.DataBind(); 
     } 
    </script>  
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <%initList(); %> 
     <asp:DataGrid runat="server" ID="Grid1" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:BoundColumn DataField="!" DataFormatString="Data: {0}" HeaderText="Dyad"/> 
      </Columns> 
     </asp:DataGrid> 
    </form> 
</body> 
</html> 

तो एक GridView के रूप में आंतरिक अनुभाग होगा

<asp:GridView runat="server" ID="Grid1" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:BoundField DataField="!" DataFormatString="Data: {0}" HeaderText="Dyad"/> 
     </Columns> 
    </asp:GridView> 

आप आगे और पीछे स्विच करते हैं, तो ध्यान दें कि VS2008 (कम से कम) नहीं नियंत्रण प्रकार Designer.cs कक्षा में फिर से घोषणा कर सकते हैं , इसलिए यदि तत्व तत्वों को संपादित करना है तो आपको इसे हाथ से बदलना होगा।

संबंधित मुद्दे