मैं XAML DataGridColumns को संपूर्ण DataGrid कैसे भरूं?


117

मैं XAML (नहीं सिल्वरलाइट) में डेटाग्रिड्स का उपयोग करने योग्य स्तंभों के साथ कर रहा हूं, यदि उपयोगकर्ता स्क्रीन का आकार बदलता है तो डेटाग्रिड का विस्तार होगा।

वर्तमान में यदि सभी DataGrid कॉलम की चौड़ाई DataGrid की चौड़ाई से कम है, तो मुझे एक अतिरिक्त "कॉलम" प्राप्त होता है, जो कि स्पष्ट नहीं है और बिना किसी उद्देश्य के कार्य करता है।

क्या किसी को पता है कि एक कॉलम बनाने के लिए हमेशा शेष सभी स्थान को भरने के लिए आकार बदलना चाहिए?

जवाबों:


248

यदि आप Width="*"कॉलम का उपयोग करते हैं तो उपलब्ध स्थान का विस्तार होगा।

यदि आप चाहते हैं कि सभी कॉलम ग्रिड को समान रूप से विभाजित करें तो यह सभी कॉलमों पर समान रूप से लागू होता है। यदि आप केवल एक शेष स्थान को भरना चाहते हैं, तो इसे बाकी कॉलम में "ऑटो" या एक विशिष्ट चौड़ाई के साथ लागू करें।

Width="0.25*"यदि आप कॉलम को उपलब्ध चौड़ाई का 1/4 भाग लेना चाहते हैं, तो आप (उदाहरण के लिए) भी उपयोग कर सकते हैं ।


2
और अगर मैं का उपयोग कर रहा हूँ इसी तरह की बात कैसे AutoGenerateColumns="True"?
javapowered

1
@javapowered - मैं यह सुझाव देते हुए आपका अपना प्रश्न पूछना चाहूंगा।
ChrisF

16
@ जजपावर<DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
जेवियर

11
@MohamedSakherSawan यह वास्तव में डेटाग्रिड के लिए काम करता है। दोनों ColumnWidth="*"पर डेटा ग्रिड और Width="*"indivdual स्तंभों पर वांछित असर
स्टीव

1
त्रुटि देता है स्टिंग को '*' में परिवर्तित नहीं किया जा सकता है
co2f2e

18

सुनिश्चित करें कि आपका DataGrid Widthकुछ इस तरह सेट किया गया है {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}

उस तरह, तत्वों Width="*"पर विशेषता की आपकी सेटिंग DataGrid.Columns/DataGridXXXXColumnको काम करना चाहिए।


9

जैसा कि उल्लेख किया गया है, ColumnWidth="*"एक्सएएमएल में एक डेटाग्रिड के लिए पूरी तरह से काम किया है।

मैंने इसे इस संदर्भ में उपयोग किया है:

<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

7

Widthएक समान चौड़ाई जैसे कॉलम गुण सेट करें*


3

मेरा 2 सेंट ->

पार्टी करने के लिए बहुत देर हो चुकी है

डेटाग्रिड -> कॉलम -> चौड़ाई = "*" केवल तभी काम करते हैं जब डेटाग्रिड पैरेंट कंटेनर में फिक्स चौड़ाई हो।

उदाहरण: मैंने डेटा ग्रिड को ग्रिड में रखा -> कॉलम जिसका चौड़ाई = "ऑटो" फिर चौड़ाई = "*" डेटाग्रिड में काम नहीं करता है लेकिन अगर आप ग्रिड सेट करते हैं -> कॉलम चौड़ाई = "450" ​​का अर्थ है निश्चित तो यह ठीक काम करता है


2

इसी विषय पर एक और स्पिन:

protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1);

    foreach (var column in dataGrid.Columns)
    {
       column.Width = dataGrid.Width / dataGrid.Columns.Count;
    }
 }

1

मैंने एक क्षैतिज आरेख = "केंद्र" (डिफ़ॉल्ट "स्ट्रेच") जोड़ा है और इसने मेरी समस्या को हल कर दिया क्योंकि इसने डेटाग्रिड को केवल उतना ही चौड़ा बना दिया जितना आवश्यक था। (यदि आपके पास एक है datagrid की चौड़ाई सेटिंग हटा दी गई है।)

यहां छवि विवरण दर्ज करें


चयनित उत्तर के साथ संयुक्त और इसने मेरे लिए समस्या को हल कर दिया। मुझे दाताग्रिड पर ही चौड़ाई निकालने की जरूरत थी। धन्यवाद।
ब्रायन हैरिंगटन

0

यह शेष स्थान लेने के लिए xaml ग्रिड के अंतिम कॉलम का विस्तार नहीं करेगा यदि AutoGeneratedColumns="True"


मैंने AutoGenerateColumns को हटा दिया है, भले ही कॉलम डेटा ग्रिड / स्क्रीन की पूरी चौड़ाई को विभाजित या बढ़ाया नहीं गया हो। मेरे पास ग्रिड की संबंधित पंक्ति "*" है और कॉलम की चौड़ाई में कोई चौड़ाई निर्दिष्ट नहीं है (या तो "ऑटो" या "कुछ मूल्य")। लेकिन अभी भी मैं इस मुद्दे को ले रहा हूं, यहां मेरे डिजाइन का xaml कोड है pastie.org/10085815
GK

0

किसी भी स्तंभ की चौड़ाई को किसी भी मान पर सेट करें, अर्थात चौड़ाई = "*"


0

C # वर्कअराउंड की तलाश करने वालों के लिए:

यदि आपको "AutoGeneratedColumns" को सक्षम करने के लिए किसी कारण की आवश्यकता है, तो एक चीज जो आप कर सकते हैं वह यह है कि आप जिस ऑटो को आकार देना चाहते हैं उसे छोड़कर सभी कॉलम की चौड़ाई निर्दिष्ट करें (यह शेष स्थान नहीं लेगा , लेकिन यह आकार बदल जाएगा सेल की सामग्री )।

उदाहरण (dgShopppingCart मेरा DataGrid है):

dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; 
dgShoppingCart.Columns[1].Header = "Qty";
dgShoppingCart.Columns[1].Width = 100;
dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/
dgShoppingCart.Columns[3].Header = "Price";
dgShoppingCart.Columns[3].Width = 100;
dgShoppingCart.Columns[4].Visibility = Visibility.Hidden; 

मेरे लिए यह वर्कअराउंड के रूप में काम करता है क्योंकि जब यूजर विंडो को अधिकतम करता है तो मुझे डेटाग्रिड का आकार बदलना पड़ता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.