Je dois relier un Si la liste est NULL, je crée une liste vide afin que les en-têtes soient affichés, mais cela ne crée pas une ligne vide pour que je puisse être capable de pouvoir Ajouter des éléments. Pourquoi? Comment puis-je activer l'utilisateur d'ajouter des valeurs à cette liste? P> Quelqu'un code p> datagridview code> à partir d'une liste
activer l'ajout code>.
3 Réponses :
Tout d'abord, Cette propriété dit P> Si la DataGridView est liée aux données,
L'utilisateur est autorisé à ajouter des rangées si
cette propriété et les données
ibindinglist de la source.allownew
la propriété est définie sur true. p>
blockQuote> si ilist.effixedsize ou
Ilist.isreadonly est vrai, cela
La propriété retourne false. p>
blockquote> puisque vous liez un DataGridView UservationAnservationadroadrows code>
doit être true code> (et c'est puisque vous le réglez dans le concepteur).
ibindinglist.allownew code>
(qui n'est pas réglable) mentionne également: P>
ienumerable code>, je pense que
isreadonly code> est
false code>. Essayez d'exposer la liste sous la liste
Liste
BindingList
public List<Value> ValueList
{
get;
set;
}
private void Form1_Load(object sender, EventArgs ev)
{
if (ValueList == null)
{
ValueList = new List<Value>();
}
dataGrid.DataSource = new BindingList<Value>(ValueList);
}
Ajout à la réponse de Jon: BindingList
addingrow code>, que vous pouvez écouter, pour spécifier l'élément à ajouter:
AddHandler _bindingList.AddingNew, Sub(s, args)
args.NewObject = New TicketItem("dawg")
End Sub
Cette propriété sera false si vous avez DataGridView.allowAserAdrows = TRUE; Mais ne disposez pas de constructeur par défaut pour votre classe de liaison. Ajouter par défaut et fonctionner
public class atsTableInclude { // keep this to allow user to add row public atsTableInclude() { } public atsTableInclude(string p, bool u) { Prefix = p; Use = u; } public string Prefix { get; set; } public bool Use { get; set; } } public Sorting.SortableBindingList<T> FillAtsList<T>(string jsonfile) where T : class { if (!File.Exists(jsonfile)) { MessageBox.Show(jsonfile, "File not found"); return null; } try { // load json from file using (StreamReader r = new StreamReader(jsonfile)) { string json = r.ReadToEnd(); var res = JsonConvert.DeserializeObject<List<T>>(json); return new Sorting.SortableBindingList<T>(res); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Cannot load json", MessageBoxButtons.OK, MessageBoxIcon.Error); } return null; } private void frmATS_Load(object sender, EventArgs e) { string jsonfile2 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "atsTableInclude.json"); dataGridView2.DataSource = FillAtsList<atsTableInclude>(jsonfile2); }
Ajouter un constructeur par défaut l'a fait pour moi. Merci!
Pourquoi n'êtes-vous pas contraignant sur un
BindingList code>? msdn.microsoft.com/en-us/library/ms132679.aspx
@Jon je ne savais pas sur
BindingList Code>, je ne coporte généralement pas sur Winforms. Changer-le à un
Bindinglist Code> a fonctionné, merci.